1、批量转换.doc文件为.docx文件
# coding=utf-8
# 代码文件:chapter7/ch7.2.1.py
import os
from win32com import client as wc # 导入模块
# 查找dir目录下ext后缀名的文件列表
# dir参数是文件所在目录,ext参数是文件后缀名
def findext(dir, ext):
allfile = os.listdir(dir)
# 返回过滤器对象
files_filter = filter(lambda x: x.endswith(ext), allfile)
# 从过滤器对象提取列表
list2 = list(files_filter)
return list2 # 返回过滤后条件文件名
if __name__ == '__main__':
# 设置输入目录
indir = r'C:\Users\tony\OneDrive\书\电子\Python自动化办公\code\chapter7\data\test\in'
# 设置输出目录
outdir = r'C:\Users\tony\OneDrive\书\电子\Python自动化办公\code\chapter7\data\test\out'
wordapp = wc.Dispatch("Word.Application") # 创建Word应用程序对象
# 查找indir目录中所有.doc文件
list2 = findext(indir, '.doc')
for name in list2:
infile = os.path.join(indir, name) # 将目录和文件名连接起来
name = name.replace('.doc', '.docx')
outfile = os.path.join(outdir, name)
document = wordapp.Documents.Open(infile) # 打开Word文件
document.SaveAs(outfile, FileFormat=12)
print(outfile, "转换OK。")
document.Close(0) # 关闭Word 0表示不保存变更
print("Game Over!")
2、采用模板批量生成证书文件
# coding=utf-8
# 代码文件:chapter7/ch7.2.2.py
from datetime import datetime
import xlwings as xw
# 从docxtpl库导入DocxTemplate对象
from docxtpl import DocxTemplate
''' # 读取Excel文件获得员工数据 '''
def readdata():
app = xw.App(visible=False, add_book=False)
f = r'data/员工信息.xlsx'
print('打开文件:', f)
wb = app.books.open(f)
sheet1 = wb.sheets[0]
# 选择姓名单元格区域
rng = sheet1.range('B2').expand('down')
names = rng.value
wb.close()
app.quit()
print('关闭文件:', f)
# 返回姓名列表
return names
if __name__ == '__main__':
'''获得员工姓名列表 '''
emps = readdata()
# 获得当前日期,设置日期格式为yyyy-mm-dd(4位年、2位月和2位日)
date = datetime.now().strftime('%Y-%m-%d')
# 设置输出目录
outdir = r'C:\Users\tony\OneDrive\书\电子\Python自动化办公\code\chapter7\data\test\out'
for emp in emps:
tpl = DocxTemplate('data/证书模板.docx')
context = {
} # 传递给模板的字典对象
context['name'] = emp
context['title'] = '关总经理'
context['date'] = date
tpl.render(context) # 渲染模板生成docx文档
file = ('{0}/证书-{1}.docx'.format(outdir, emp))
tpl.save(file) # 将渲染成文档对象保存为docx文件
print('{0}证书生成完成。'.format(emp))
print('Game Over!')
3、批量统计文件页数和字体数
# coding=utf-8
# 代码文件:chapter7/ch7.2.3.py
import os
from win32com.client import Dispatch
# 查找dir目录下ext后缀名的文件列表
# dir参数是文件所在目录,exts参数是指定文件后缀名列表
def findext(dir, exts):
allfile = os.listdir(dir)
# 返回过滤器对象
files_filter = filter(lambda x: os.path.splitext(x)[1] in exts, allfile)
# 从过滤器对象提取列表
list2 = list(files_filter)
return list2 # 返回过滤后条件文件名
if __name__ == '__main__':
# 设置输入目录
indir = r'C:\Users\tony\OneDrive\书\电子\Python自动化办公\code\chapter7\data\test\in'
# 通过findext函数查找指定目录下的.doc和.docx文件
list2 = findext(indir, ['.doc', '.docx'])
# 打开Word文档
wordapp = Dispatch('Word.Application')
wordapp.Visible = False # 设置文档不可见
# 遍历文件列表
for name in list2:
infile = os.path.join(indir, name) # 将目录和文件名连接起来
document = wordapp.Documents.Open(infile) # 打开word文件
# 重新编排页面
document.Repaginate()
pagenum = document.ComputeStatistics(2) # 返回文档页数
wordnum = document.ComputeStatistics(6) # 返回文档字符数
# 2 页数
# 1 行数
# 3 字符数
# 4 段落数
# 6 亚洲语言字符数
# 0 单词数
print('文{0}文件:页数是:{1},字符数:{2}'.format(name, pagenum, wordnum))
document.Close(0) # 关闭Word文档 0表示不保存
wordapp.Quit() # 退出Word应用
print("Game Over!")
4、批量转换Word文件为PDF文件
# coding=utf-8
# 代码文件:chapter7/ch7.2.4.py
import os
from win32com import client as wc # 导入模块
# 查找dir目录下ext后缀名的文件列表
# dir参数是文件所在目录,exts参数是指定文件后缀名列表
def findext(dir, exts):
allfile = os.listdir(dir)
# 返回过滤器对象
files_filter = filter(lambda x: os.path.splitext(x)[1] in exts, allfile)
# 从过滤器对象提取列表
list2 = list(files_filter)
return list2 # 返回过滤后条件文件名
if __name__ == '__main__':
# 设置输入目录
indir = r'C:\Users\tony\OneDrive\书\电子\Python自动化办公\code\chapter7\data\test\in'
# 设置输出目录
outdir = r'C:\Users\tony\OneDrive\书\电子\Python自动化办公\code\chapter7\data\test\out'
wordapp = wc.Dispatch("Word.Application") # 创建Word应用程序对象
# 查找indir目录中所有.doc文件
# 通过findext函数查找指定目录下的.doc和.docx文件
list2 = findext(indir, ['.doc', '.docx'])
for name in list2:
# 将目录和文件名连接起来
infile = os.path.join(indir, name)
# 将文件后缀名.docx替换为.pdf
name = name.replace('.docx', '.pdf')
# 将文件后缀名.docx替换替为pdf
name = name.replace('.doc', '.pdf')
outfile = os.path.join(outdir, name)
document = wordapp.Documents.Open(infile) # 打开Word文件
document.SaveAs(outfile, FileFormat=17)
print(outfile, "转换OK。")
document.Close(0) # 关闭Word文件
wordapp.Quit() # 退出Word应用
print("Game Over!")
参考:《趣玩python:自动化办公真简单》p176
文章评论