使用Python实现对word的批量操作

Python在平时写写小工具真是方便快捷,Pyhon大法好。以下所有代码都是找了好多网上的大佬分享的代码按照自己的需求改的。

调用的库为Python-docx、win32com、PyPDF2、xlwings(操作excel)。

因为公司的任务要对上千个word文件进行批量操作,手工操作太累了,于是加班加点赶出来了一个自动化脚本,虽然还有很多要优化的地方,但已经可以稳定运行了,下面记录一下脚本功能。

1 doc转docx

因为Python-docx库只能对docx文件操作,所以要转格式,直接改后缀不行。

word = wc.Dispatch("Word.Application")
# 不能用相对路径,老老实实用绝对路径
# 需要处理的文件所在文件夹目录
for root, dirs, files in os.walk(rawpath):for i in files:# 找出文件中以.doc结尾并且不以~$开头的文件(~$是为了排除临时文件的)if i.endswith('.doc') and not i.startswith('~$'):print(i)doc = word.Documents.Open(root +'\\'+ i)# # 将文件名与后缀分割rename = os.path.splitext(i)# 将文件另存为.docxdoc.SaveAs(root + '\\' +rename[0] + '.docx', 12)  # 12表示docx格式doc.Close()# time.sleep(1)
word.Quit()

2 找到特定文件

这个比较简单,只需要循环遍历文件夹,按照队列里的关键字将目标文件添加的队列里即可。

因为转pdf只能是docx,所以要找docx文件,同时过滤~$文件开头的临时文件。

def findfiles():count = 1for root, dirs, files in os.walk(path):for filename in files:for i in range(len(filenames)):if (filenames[i] in filename and filename.endswith('docx') and not filename.startswith('~$') :result.append([count, root + "\\" + filename])count += 1breakprint(result)

3 所有字体颜色变为黑色

def change_color(path):file = Document(path)for pag in file.paragraphs:for block in pag.runs:block.font.color.rgb = RGBColor(0, 0, 0)for table in file.tables:for row in table.rows:for cell in row.cells:for cell_pag in cell.paragraphs:for cell_block in cell_pag.runs:cell_block.font.color.rgb = RGBColor(0, 0, 0)# 页眉pag_head = file.sections[0].headerhead_pag = pag_head.paragraphs[0]for run in head_pag.runs:run.font.color.rgb = RGBColor(0, 0, 0)#  页脚pag_foot = file.sections[0].footerfoot_pag = pag_foot.paragraphs[0]for run in foot_pag.runs:run.font.color.rgb = RGBColor(0, 0, 0)file.save(path)print(path)print("^"*10 + "颜色切换完成" + "^"*10)

4 docx转pdf

因为分页操作只能pdf实现。

for i in range(len(result)):file = result[i][1]name = file.rsplit('\\', 1)[1]print(i)if "关键字" in name:  # 跳过不需要截取的关键字文件outfile = pdf_file_path + name[:-5] + str(i) +'.pdf'else:outfile = out_path + name[:-5] + str(i) +'.pdf'  if file.split(".")[-1] == 'docx':print(file)convert(file, outfile)print("^"*10+"PDF转换完成"+"^"*10)time.sleep(1) 

5 截取特定页面

def split_single_pdf(read_file, start_page, end_page, pdf_file):# 1. 获取原始pdf文件fp_read_file = open(read_file, 'rb')# 2. 将要分割的PDF内容格式化pdf_input = PdfFileReader(fp_read_file)# 3. 实例一个 PDF文件编写器pdf_output = PdfFileWriter()# 4. 把第一页放到PDF文件编写器for i in range(start_page, end_page):pdf_output.addPage(pdf_input.getPage(i))# 5. PDF文件输出with open(pdf_file, 'wb') as pdf_out:pdf_output.write(pdf_out)print(f'{read_file}分割{start_page}页-{end_page}页完成,保存为{pdf_file}!')

6 调用打印机打印

def printer_loading(filename):win32api.ShellExecute(0, "print", filename, '/d:"%s"' % win32print.GetDefaultPrinter(), ".", 0)

7 对execl特定页面打印

def excel_print(execl_path):app = xw.App(visible=False, add_book=False)workbook = app.books.open(execl_path)worksheet = workbook.sheets['sheet关键字']area = worksheet.range('A1:D11')  # 打印区域area.api.PrintOut(Copies=1, ActivePrinter='Canon MF260 Series UFRII LT', Collate=True)workbook.close()app.quit() 

              【下面是我整理的2023年最全的软件测试工程师学习知识架构体系图】


一、Python编程入门到精通

二、接口自动化项目实战 

三、Web自动化项目实战


四、App自动化项目实战 

五、一线大厂简历


六、测试开发DevOps体系 

七、常用自动化测试工具

八、JMeter性能测试 

九、总结(尾部小惊喜)

生命不息,奋斗不止。每一份努力都不会被辜负,只要坚持不懈,终究会有回报。珍惜时间,追求梦想。不忘初心,砥砺前行。你的未来,由你掌握!

生命短暂,时间宝贵,我们无法预知未来会发生什么,但我们可以掌握当下。珍惜每一天,努力奋斗,让自己变得更加强大和优秀。坚定信念,执着追求,成功终将属于你!

只有不断地挑战自己,才能不断地超越自己。坚持追求梦想,勇敢前行,你就会发现奋斗的过程是如此美好而值得。相信自己,你一定可以做到! 

最后感谢每一个认真阅读我文章的人,礼尚往来总是要有的,虽然不是什么很值钱的东西,如果你用得到的话可以直接拿走:

这些资料,对于【软件测试】的朋友来说应该是最全面最完整的备战仓库,这个仓库也陪伴上万个测试工程师们走过最艰难的路程,希望也能帮助到你!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/277798.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

3小时快速入门自动化测试 —— Selenium测试工具

自动化测试 自动化测试简单来说就是利用自动化测试工具和自动化测试脚本来完成指定的测试任务,测试启动过程无需人工参与,但自动化测试之前的准备工作需要人工手动配置好。它是一种将重复性、繁琐的测试任务交给计算机自动执行的方法,能够显…

设施设备二维码巡检卡制作教程

通过凡尔码平台给每个设备生成对应的二维码,取代传统纸质巡检卡,微信扫码即可查看设备基本信息、填写设备日常检查记录,记录自动汇总后台,随时登录后台查看和导出数据,管理人员绑定凡尔码小程序即可随时了解设备巡检完…

第P7周:咖啡豆识别(VGG-16复现)

>- **🍨 本文为[🔗365天深度学习训练营](https://mp.weixin.qq.com/s/rbOOmire8OocQ90QM78DRA) 中的学习记录博客** >- **🍖 原作者:[K同学啊 | 接辅导、项目定制](https://mtyjkh.blog.csdn.net/)** 一、前期工作 import …

MFC画折线图,基于x64系统

由于项目的需要,需要画一个折线图。 传统的Teechart、MSChart、HighSpeedChart一般是只能配置在x86系统下,等到使用x64系统下运行就是会报出不知名的错误,这个地方让人很苦恼。 我在进行配置的过程之中,使用Teechart将x86配置好…

【Qt5】ui文件最后会变成头文件

2023年12月14日,周四下午 我也是今天下午偶然间发现这个的 在使用Qt的uic(User Interface Compiler)工具编译ui文件时,会生成对应的头文件。 在Qt中,ui文件是用于描述用户界面的XML文件,而头文件是用于在…

【C语言(十二)】

数据在内存中的存储 一、整数在内存中的存储 整数的2进制表示方法有三种,即 原码、反码和补码 有符号的整数,三种表示方法均有符号位和数值位两部分,符号位都是用0表示“正”,用1表示“负”,最高位的⼀位是被当做符号…

NNDL 作业10 BPTT

习题6-1P 推导RNN反向传播算法BPTT. 我的推导 和PPT结果对比,可得答案没问题 习题6-2 推导公式(6.40)和公式(6.41)中的梯度. 习题6-3 当使用公式(6.50)作为循环神经网络的状态更新公式时, 分析其可能存在梯度爆炸的原因并给出解决方法&…

【Spring的AOP】Spring的简介、案例与工作流程

文章目录 1. 什么是AOP2. AOP的核心概念3. AOP的入门案例原始代码思路分析第一步:导入坐标第二步:制作连接点(原始操作,Dao接口与实现类)第三步:制作共性功能(通知类与通知)第四步&a…

继续看回溯问题

关卡名 继续看回溯问题 我会了✔️ 内容 1.复习递归和N叉树,理解相关代码是如何实现的 ✔️ 2.理解回溯到底怎么回事 ✔️ 3.掌握如何使用回溯来解决二叉树的路径问题 ✔️ 1 复原IP地址 这也是一个经典的分割类型的回溯问题。LeetCode93.有效IP地址正好由四…

TrustZone之完成器:外围设备和内存

到目前为止,在本指南中,我们集中讨论了处理器,但TrustZone远不止是一组处理器功能。要充分利用TrustZone功能,我们还需要系统其余部分的支持。以下是一个启用了TrustZone的系统示例: 本节探讨了该系统中的关键组件以及它们在TrustZone中的作用。 完成器:外围设备…

概念解读稳定性保障

什么是稳定 百度百科关于稳定的定义: “稳恒固定;没有变动。” 很明显这里的“稳定”是相对的,通常会有参照物,例如 A 车和 B 车保持相同速度同方向行驶,达到相对平衡相对稳定的状态。 那么软件质量的稳定是指什么…

PhotoMaker——通过堆叠 ID 嵌入定制逼真的人像照片

论文网址链接:https://arxiv.org/abs/2312.04461 详情网址链接:PhotoMaker 开源代码网址链接:GitHub - TencentARC/PhotoMaker: PhotoMaker 文本到图像AI生成的最新进展在根据给定文本提示合成逼真的人类照片方面取得了显着进展。然而&#…