# -*- coding:utf-8 -*-
import os # 导入系统功能模块
from win32com.client import Dispatch, DispatchEx # 导入pywin32模块的client包下的函数
from win32com.client import constants # 导入pywin32模块的client包下的保存COM常量的类
from win32com.client import gencache # 导入pywin32模块的client包下的gencache函数
from PyPDF2 import PdfFileReader # 获取页码用
import re # 导入正则表达式模块
import pythoncom # 导入封装了OLE自动化API的模块,该模块为pywin32的子模块
'''获取指定目录下的文件
filepath:要遍历的目录
filelist_out:输出文件列表
file_ext:文件的扩展名,默认为任何类型的文件
'''
def getfilenames(filepath='',filelist_out=[],file_ext='all'):
# 遍历filepath下的所有文件,包括子目录下的文件
for fpath, dirs, fs in os.walk(filepath):
for f in fs:
fi_d = os.path.join(fpath, f)
if file_ext == '.doc': # 遍历Word文档文件
if os.path.splitext(fi_d)[1] in ['.doc','.docx']: # 判断是否为Word文件
filelist_out.append(re.sub(r'\\','/',fi_d)) # 添加到路径列表中
else:
if file_ext == 'all': # 要获取所有文件的情况
filelist_out.append(fi_d) # 将文件路径添加到路径列表中
elif os.path.splitext(fi_d)[1] == file_ext: # 要获取除了Wrod文件以外的文件
filelist_out.append(fi_d) # 将文件路径添加到路径列表中
else:
pass
filelist_out.sort() # 对路径进行排序
return filelist_out # 返回文件完整路径列表
# Word转换为PDF(多个文件)
def wordtopdf(filelist,targetpath):
totalPages = 0 # 记录总页码
valueList = []
try:
pythoncom.CoInitialize() # 调用线程初始化COM库,解决调用Word 2007时出现“尚未调用CoInitialize”错误的问题
gencache.EnsureModule('{00020905-0000-0000-C000-000000000046}', 0, 8, 4)
# 开始转换
w = Dispatch("Word.Application")
for fullfilename in filelist:
(filepath,filename) = os.path.split(fullfilename) # 分割文件路径和文件名,其中,filepath表示文件路径;filename表示文件名
softfilename = os.path.splitext(filename) # 分割文件名和扩展名
os.chdir(filepath)
doc = os.path.abspath(filename)
os.chdir(targetpath)
pdfname = softfilename[0] + ".pdf"
output = os.path.abspath(pdfname)
pdf_name = output
# 文档路径需要为绝对路径,因为Word启动后当前路径不是调用脚本时的当前路径。
try: # 捕捉异常
doc = w.Documents.Open(doc, ReadOnly=1)
doc.ExportAsFixedFormat(output, constants.wdExportFormatPDF, \
Item=constants.wdExportDocumentWithMarkup,
CreateBookmarks=constants.wdExportCreateHeadingBookmarks)
except Exception as e: # 处理异常
print(e)
if os.path.isfile(pdf_name): # 判断文件是否存在
# 获取页码
pages = getPdfPageNum(pdf_name) # 获取页码
valueList.append([fullfilename,str(pages)])
totalPages += pages # 累加页码
os.remove(pdf_name) # 删除生成的PDF文件
else:
print('转换失败!')
return False
w.Quit(constants.wdDoNotSaveChanges) # 退出Word应用程序
return totalPages,valueList # 返回总页码和每个文档的页码
except TypeError as e:
print('出错了!')
print(e)
return False
'''
功能:统计文档页码
path:文件绝对路径
'''
def getPdfPageNum(path):
with open(path, "rb") as file:
doc = PdfFileReader(file)
pagecount = doc.getNumPages()
return pagecount
if __name__ == '__main__':
sourcepath = r"E:/learn/test/doc/temp" # 指定源路径(Word文档所在路径)
targetpath = r"E:/learn/test/doc/pdf/" # 指定目标路径(PDF保存路径)
filelist = getfilenames(sourcepath,[],'.doc') # 获取Word文档路径
valueList = wordtopdf(filelist,targetpath) # 实现将Word文档批量转换为PDF
resultList = valueList[1] # 获取统计结果
if valueList:
for i in resultList:
print(i[0],i[1])
totalPages = str(valueList[0]) # 总页数
print("合计页数:",totalPages)
else:
print("没有要统计的文件或者统计失败!")
在IT行业中,自动化是提升效率的关键,特别是在处理大量文档时。本示例涉及的主题是"Office办公自动化",特别是利用Python编程语言来批量提取Word文档的页码,并进行总页码的计算。这个过程通常涉及到文件操作、文本解析以及数据分析等技术。 Python是一种功能强大的编程语言,对于办公自动化任务尤其适用,因为其拥有丰富的库支持,如`docx`库,可以方便地读取和操作Microsoft Word文档。在这个实例中,我们将主要关注以下知识点: 1. **Python的`docx`库**:`python-docx`是Python的一个第三方库,用于读写Microsoft Word的.docx格式文件。它提供了与Word文档交互的API,包括创建、修改和读取文档内容,比如段落、表格、页眉、页脚等。 2. **批量处理文件**:在Python中,可以通过os模块遍历指定目录下的所有文件。例如,使用`os.listdir()`获取目录中的文件名,然后通过`os.path.join()`构建完整的文件路径,对每个Word文档进行处理。 3. **提取页码**:`docx`库允许我们访问文档的页眉和页脚,页码通常存储在那里。通过访问`docx.document.Document`对象的页眉或页脚部分,我们可以找到页码元素并提取其文本。 4. **计算总页码**:当批量处理多个文档时,可能需要计算所有文档的总页码。这可能涉及到将每个文档的页码累加,并考虑到某些文档可能有不同数量的页面。 5. **数据结构和变量管理**:为了跟踪每个文档的页码以及计算总数,需要合理设计数据结构,例如使用字典或者列表。同时,合理使用变量来保存中间结果,避免重复计算。 6. **异常处理**:在处理大量文件时,可能会遇到各种问题,如文件不存在、权限错误等。使用try-except语句可以确保程序在遇到错误时能够优雅地处理,而不是突然崩溃。 7. **文件操作**:Python的`open()`函数用于打开文件,`read()`和`write()`用于读写操作。在处理完Word文档后,记得使用`close()`关闭文件,以释放系统资源。 8. **代码优化**:为了提高处理速度,可以考虑使用多线程或异步I/O来并发处理多个文件,但需要注意的是,Python的全局解释器锁(GIL)可能限制了多线程的并行性,因此在某些情况下,使用进程池(`multiprocessing.Pool`)可能更为合适。 9. **数据分析**:在提取和计算页码之后,可能还需要进行一些数据分析,比如找出页码最多的文档,或者统计页码分布的平均值、中位数等。 10. **源码解读**:解压后的文件包含一个Python脚本,该脚本将展示上述所有步骤的具体实现。通过阅读源码,你可以学习到如何将理论知识应用于实际项目。 这个实例提供了一个很好的机会,让你了解如何结合Python的`docx`库和文件操作技术来解决实际办公自动化问题。在学习过程中,不仅能够提升Python编程技能,还能加深对文件操作、数据处理和异常处理的理解。

























- 1

- #完美解决问题
- #运行顺畅
- #内容详尽
- #全网独家
- #注释完整
- Yao86052022-12-14终于找到了超赞的宝藏资源,果断冲冲冲,支持!
- 九点三十七2024-09-19资源是宝藏资源,实用也是真的实用,感谢大佬分享~

- 粉丝: 6w+
- 资源: 2万+
我的内容管理 展开
我的资源 快来上传第一个资源
我的收益
登录查看自己的收益我的积分 登录查看自己的积分
我的C币 登录后查看C币余额
我的收藏
我的下载
下载帮助


最新资源
- 基于Winform嵌入Echarts图表与CefSharp浏览器的源码项目:C#与JS交互的桌面应用,Winform桌面程序集成Echarts图表:利用CefSharp浏览器控件实现完美嵌入与JS-C
- MATLAB程序:新能源接入电力市场主辅联合出清模型-基于IEEE30节点系统SCUC与SCED协同优化分析的实践案例,基于MATLAB的新能源接入电力市场主辅联合出清模型:考虑安全约束与经济调度的
- 鲸鱼优化算法WOA优化CNN学习率与隐含层神经元数拟合预测建模,Matlab程序实现,多图展示预测效果,鲸鱼优化算法WOA在卷积神经网络CNN中的学习率与隐含层神经元优化建模:多输入单输出预测及性能评
- 文化产业发展概论及其相关知识
- 21考试真题最近的t314.txt
- 21考试真题最近的t315.txt
- 蛇优化算法结合SVM参数c和g优化进行多输入单输出预测建模-matlab程序实现与结果展示,蛇优化算法SO优化SVM参数c和g的多输入单输出拟合预测建模matlab程序,蛇优化算法SO优化支持向量机
- 文化产业概论:发展历程、现状与关键文化概念解析
- 基于最大互信息系数MIC的特征自变量选择优化回归拟合数据集,简化数据复杂度(Matlab实现),基于最大互信息系数MIC的特征自变量选择优化回归拟合数据集,降低数据维度,简化复杂度-MATLAB程序
- T型三电平逆变器SVPWM仿真研究:五电平线电压波形与三相对称电压电流波形实现探索,基于SVPWM技术的T型三电平逆变器仿真研究:五电平线电压波形与LCL滤波器下的三相电压电流波形分析,T型三电平逆变
- 市场营销学作业解析:涵盖消费者行为、渠道策略及营销理念
- 视频格式转换工具,永久免费
- 生物质基阻燃剂的制备及其阻燃环氧树脂的性能研究_隋颜隆.pdf
- 基于Vue的简单成绩管理系统
- Gowin-master.国产高云FPGA 开发板及其工程
- 个人网站导航页源码/静态导航网站源码/落地页制作/落地页源码


