利用python批量将office格式(word、PPT、Excel)转换为PDF
一、python的安装
python 3 10 5的安装
二、python编辑器的安装
在这里我使用的是VS code 1.62.3
三、pywin32库的安装
在CMD里面使用pip install pywin32进行安装
四、全部代码
import os, win32com.client, gc# Word
def word2Pdf(filePath, words):# 如果没有文件则提示后直接退出if(len(words)<1):print ("\n【无 Word 文件】\n")return# 开始转换print ("\n【开始 Word -> PDF 转换】")try:print ("打开 Word 进程...")word = win32com.client.Dispatch("Word.Application")word.Visible = 0word.DisplayAlerts = Falsedoc = Nonefor i in range(len(words)):print(i)fileName = words[i] # 文件名称fromFile = os.path.join(filePath, fileName) # 文件地址toFileName = changeSufix2Pdf(fileName) # 生成的文件名称toFile = toFileJoin(filePath,toFileName) # 生成的文件地址print ("转换:"+fileName+"文件中...")# 某文件出错不影响其他文件打印try:doc = word.Documents.Open(fromFile)doc.SaveAs(toFile,17) # 生成的所有 PDF 都会在 PDF 文件夹中print ("转换到:"+toFileName+"完成")except Exception as e:print(e)# 关闭 Word 进程print ("所有 Word 文件已打印完毕")print ("结束 Word 进程...\n")doc.Close()doc = Noneword.Quit()word = None except Exception as e:print(e)finally:gc.collect()# Excel
def excel2Pdf(filePath, excels):# 如果没有文件则提示后直接退出if(len(excels)<1):print ("\n【无 Excel 文件】\n")return# 开始转换print ("\n【开始 Excel -> PDF 转换】")try:print ("打开 Excel 进程中...")excel = win32com.client.Dispatch("Excel.Application")excel.Visible = 0excel.DisplayAlerts = Falsewb = Nonews = Nonefor i in range(len(excels)):print(i)fileName = excels[i] # 文件名称fromFile = os.path.join(filePath, fileName) # 文件地址print ("转换:"+fileName+"文件中...")# 某文件出错不影响其他文件打印try:wb = excel.Workbooks.Open(fromFile)for j in range(wb.Worksheets.Count): # 工作表数量,一个工作簿可能有多张工作表toFileName = addWorksheetsOrder(fileName, j+1) # 生成的文件名称toFile = toFileJoin(filePath,toFileName) # 生成的文件地址ws = wb.Worksheets(j+1) # 若为[0]则打包后会提示越界ws.ExportAsFixedFormat(0,toFile) # 每一张都需要打印print ("转换至:"+toFileName+"文件完成")except Exception as e:print(e)# 关闭 Excel 进程print ("所有 Excel 文件已打印完毕")print ("结束 Excel 进程中...\n")ws = Nonewb.Close()wb = Noneexcel.Quit()excel = Noneexcept Exception as e:print(e)finally: gc.collect()# PPT
def ppt2Pdf(filePath, ppts):# 如果没有文件则提示后直接退出if(len(ppts)<1):print ("\n【无 PPT 文件】\n")return# 开始转换print ("\n【开始 PPT -> PDF 转换】")try:print ("打开 PowerPoint 进程中...")powerpoint = win32com.client.Dispatch("PowerPoint.Application")ppt = None# 某文件出错不影响其他文件打印for i in range(len(ppts)):print(i)fileName = ppts[i] # 文件名称fromFile = os.path.join(filePath, fileName) # 文件地址toFileName = changeSufix2Pdf(fileName) # 生成的文件名称toFile = toFileJoin(filePath,toFileName) # 生成的文件地址print ("转换:"+fileName+"文件中...")try:ppt = powerpoint.Presentations.Open(fromFile,WithWindow=False)if ppt.Slides.Count>0:ppt.SaveAs(toFile, 32) # 如果为空则会跳出提示框(暂时没有找到消除办法)print ("转换至:"+toFileName+"文件完成")else:print("(错误,发生意外:此文件为空,跳过此文件)")except Exception as e:print(e)# 关闭 PPT 进程print ("所有 PPT 文件已打印完毕")print ("结束 PowerPoint 进程中...\n")ppt.Close()ppt = Nonepowerpoint.Quit()powerpoint = Noneexcept Exception as e:print(e)finally:gc.collect()# 修改后缀名
def changeSufix2Pdf(file):return file[:file.rfind('.')]+".pdf"
# 添加工作簿序号
def addWorksheetsOrder(file, i):return file[:file.rfind('.')]+"_工作表"+str(i)+".pdf"
# 转换地址
def toFileJoin(filePath,file):return os.path.join(filePath,'pdf',file[:file.rfind('.')]+".pdf")# 开始程序
print ("====================程序开始====================")
print ("【程序功能】将目标路径下内所有的 ppt、excel、word 均生成一份对应的 PDF 文件,存在新生成的 pdf 文件夹中(需已经安装office,不包括子文件夹)")
print ("注意:若某 PPT 和 Excel 文件为空,则会出错跳过此文件。若转换 PPT 时间过长,请查看是否有报错窗口等待确认,暂时无法彻底解决 PPT 的窗口问题(为空错误已解决)。在关闭进程过程中,时间可能会较长,十秒左右,请耐心等待。")
filePath = input ("输入目标路径:(若为当前路径:"+os.getcwd()+",请直接回车)\n")# 目标路径,若没有输入路径则为当前路径
if(filePath==""):filePath = os.getcwd()# 将目标文件夹所有文件归类,转换时只打开一个进程
words = []
ppts = []
excels = []for fn in os.listdir(filePath):if fn.endswith(('.doc', 'docx')):words.append(fn)if fn.endswith(('.ppt', 'pptx')):ppts.append(fn)if fn.endswith(('.xls', 'xlsx')):excels.append(fn)# 调用方法
print ("====================开始转换====================")# 新建 pdf 文件夹,所有生成的 PDF 文件都放在里面
folder = filePath + '\\pdf\\'
if not os.path.exists(folder):os.makedirs(folder)word2Pdf(filePath,words)
excel2Pdf(filePath,excels)
ppt2Pdf(filePath,ppts)
print ("====================转换结束====================")
print ("\n====================程序结束====================")
os.system("pause")
五、运行
将代码复制到python编辑器之后,运行,会弹出如下对话框
在我圈起来的地方输入需要转换的文件夹下的文件路径即可:D:\2(你自己根据实际情况来输入文件路径)
等待转换
完成
六、将其打包为可执行的.exe文件
1、首先安装pyinstaller,使用安装命令:pip3 install pyinstaller,如下图所示。
2、然后将第五步的代码制作为.py文件,并且命名(我命名为:Office2PDF.py)
方法一:pyinstaller-F
我们来将这个.py的文件打包成一个exe,我们直接cmd切换到这个脚本的目录,执行命令:pyinstaller-F D:\Office2PDF.py,如下图所:
在这里介绍一下,D:\Office2PDF.py表示我要打包的文件路径,下面我圈起来的部分,表示打包为.exe路径
方法二:pyinstaller -D 打包
我们来将这个.py的文件打包成一个exe,我们直接cmd切换到这个脚本的目录,执行命令:pyinstaller -D D:\Office2PDF.py,如下图所:
在这里介绍一下,D:\Office2PDF.py表示我要打包的文件路径,下面我圈起来的部分,表示打包为.exe路径
七、程序获取
https://wws.lanzoul.com/ir6HZ07cwkah
密码的话,关注这个公众号,然后回复:提取码
利用python批量将office格式(word、PPT、Excel)转换为PDF相关推荐
- python word,ppt,excel转pdf(word转html),转图片
word,ppt,excel转pdf 装依赖 pip install comtypes==1.1.10 转换 import comtypes.client import osdef ppt_pdf(p ...
- 【软件操作】Office将Word文档转换为PDF格式
一.问题描述 PDF格式(Portable Document Format)相比于Word文档(.doc/.docx格式)体积更大,但具有更好的文档一致性(减少排版问题),修改更困难(不易被外界篡改) ...
- Python批量提取docx格式Word文档中所有批注
封面图片:<Python程序设计基础与应用>(ISBN:9787111606178),董付国,机械工业出版社 图书详情: 用书教师可以联系董老师获取教学大纲.课件.源码.教案.考试系统等配 ...
- word,ppt,excel转换为html
因为最近上班做邮箱附件的预览功能,上网找到的解决方案是转为html文件,自己总结了一下: 1.先添加office组建,右键网站,点击添加引用 2.选择.NET找到你需要的组件,例如Microsoft. ...
- Python批量提取docx格式Word文档中所有文本框内的文本
功能描述: 批量提取指定Word文档(docx格式)中所有文本框中的文本. 测试文件: 参考代码: 执行结果:
- Unity 发布Android版,通过WPS Office打开word、excel、pdf等进行浏览
1.确保手机端安装了Wps office. 2.下载Android Studio项目文件,地址https://download.csdn.net/download/weixin_38548431/12 ...
- python批量读取图片并复制入word_提取出 Word 文档里的图片 并利用 python 批量转换格式...
日常工作中,你是否遇到过这样的场景,领导发来一份 Word 文档,要求你将文档中的图片存储到一个文件夹内,并且还要将图片都改成 .jpg 或者 .png,你会怎么办?你是不是一边内心崩溃,一边开始一张 ...
- 【Python】导出docx格式Word文档中的文本、图片和附件等
[Python]导出docx格式Word文档中的文本.图片和附件等 零.需求 为批量批改学生在机房提交的实验报告,我需要对所有的实验文档内容进行处理.需要批量提取Word文档中的图片和附件以便进一步检 ...
- python批量生成图片_利用Python批量生成任意尺寸的图片
实现效果 通过源图片,在当前工作目录的/img目录下生成1000张,分别从1*1到1000*1000像素的图片. 效果如下: 目录结构 实现示例 # -*- coding: utf-8 -*- imp ...
最新文章
- MVVM框架下,WPF实现Datagrid里的全选和选择
- [NLP]--NLP programming tutorial
- 云原生架构下日志服务数据预处理
- 分表后需要注意的那些事儿
- TypeScript reflect-metadata 结合方法装饰器实现的一个自定义语法检查的例子
- junit测试spring_使用Spring JUnit规则进行参数化集成测试
- 如何区分普通感冒流感和新型冠状病毒肺炎?
- java读取同包文件_Java实现从jar包中读取指定文件的方法
- 关于Aspose对于Word操作的一些扩展及思考
- 萌新接触前端的第三课——JavaScript
- devc++编程 error: jump to case label错误笔记
- 哈理工OJ 1184 早起一水(水题)
- 简单的C语言代码实现快速排序
- Android Jetpack架构组件(十)之Slices
- this.$refs使用方法
- MATLAB批量绘图
- 编码过程中单词常用的缩写方式(转载)
- win10下CUDA版本卸载与更新
- python中math函数_python中math模块函数
- Linux开机自启动