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)
# 将文件另存为.docx
doc.SaveAs(root + '\\' +rename[0] + '.docx', 12) # 12表示docx格式
doc.Close()
# time.sleep(1)
word.Quit()
2.找到特定文件
这个比较简单,只需要循环遍历文件夹,按照队列里的关键字将目标文件添加的队列里即可。
因为转pdf只能是docx,所以要找docx文件,同时过滤~$文件开头的临时文件。
def findfiles():
count = 1
for 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 += 1
break
print(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].header
head_pag = pag_head.paragraphs[0]
for run in head_pag.runs:
run.font.color.rgb = RGBColor(0, 0, 0)
# 页脚
pag_foot = file.sections[0].footer
foot_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()
***************************转载请注明出处,尊重原创!***************************
Python实现对word批量操作的更多相关文章
- python 使用win32com实现对word文档批量替换页眉页脚
最近由于工作需要,需要将70个word文件的页眉页脚全部进行修改,在想到这个无聊/重复/没有任何技术含量的工作时,我的内心是相当奔溃的.就在我接近奔溃的时候我突然想到完全可以用python脚本来实现这 ...
- jeecms系统使用介绍——通过二次开发实现对word、pdf、txt等上传附件的全文检索
转载请注明出处:http://blog.csdn.net/dongdong9223/article/details/76912307 本文出自[我是干勾鱼的博客] 之前在文章<基于Java的门户 ...
- python如何实现对word内段落文本及表格的读取
在以下方法中用到的三方库是:python-docx from docx import Document 获取指定段落的文本 def get_paragraph_text(path, n): " ...
- 基于Python实现对PDF文件的OCR识别
http://www.jb51.net/article/89955.htm https://pythontips.com/2016/02/25/ocr-on-pdf-files-using-pytho ...
- 【POI word】使用POI实现对Word的读取以及生成
项目结构如下: 那第一部分:先是读取Word文档 package com.it.WordTest; import java.io.FileInputStream; import java.io.Fil ...
- C#实现对Word文件读写[转]
手头上的一个项目报表相对比较简单,所以报表打印采用VBA引擎,通过定制Word模版,然后根据模版需要填充数据,然后OK,打印即可. 实现方法:首先需要引用VBA组建,我用的是Office2003 Pr ...
- 利用Python实现对Web服务器的目录探测
今天是一篇提升技能的干货分享,操作性较强,适用于中级水平的小伙伴,文章阅读用时约3分钟. PART 1/Python Python是一种解释型.面向对象.动态数据类型的高级程序设计语言. Python ...
- 利用 python 实现对web服务器的目录探测
一.pythonPython是一种解释型.面向对象.动态数据类型的高级程序设计语言.python 是一门简单易学的语言,并且功能强大也很灵活,在渗透测试中的应用广泛,让我们一起打造属于自己的渗透测试工 ...
- 利用COM组件实现对WORD书签处写入值
using System; using System.Collections.Generic; using System.Text; using Microsoft.Office.Interop.Wo ...
- 利用COM组件实现对WORD书签各种操作大全,看这一篇就够了
有个需求是,程序导出一份word报告,报告中有各种各样的表格,导出时还需要插入图片. 脑海中迅速闪过好几种组件,openxml组件,com组件,npoi.为了减少程序画复杂表格,我们选用了com组件+ ...
随机推荐
- <学习笔记> 关于二项式反演
1 容斥原理的式子: \[|A1∪A2∪...∪An|=\sum_{1≤i≤n}|Ai|−\sum_{1≤i<j≤n}|Ai∩Aj|+...+(−1)^{n−1}×|A1∩A2∩...∩An| ...
- Builder 生成器模式简介与 C# 示例【创建型2】【设计模式来了_2】
〇.简介 1.什么是生成器模式? 一句话解释: 在构造一个复杂的对象(参数多且有可空类型)时,通过一个统一的构造链路,可选择的配置所需属性值,灵活实现可复用的构造过程. 生成器模式的重心,在于分离 ...
- 犯得一些zz错误
本文用于警戒自己,不要再犯以前的傻逼错误 noip没建子文件夹导致爆零 知道关同步流之后还用endl,导致超时 使用'\n'代替endl 3.多组测试数据使用for循环占用了 i 变量名,后面在for ...
- zabbix触发器标签提取监控项子字符串功能实现对应告警恢复
0 实验环境 zabbix 6.0 1 监控项 1.1 监控项设置 通过zabbix agent自定义监控项,读取某文件内容模拟日志/trap告警,测试获取触发器标签中提取子字符串功能,以及相同标签的 ...
- gulp来处理html、css、js资源啦
gulp 一般用于处理自动化任务,默认情况无法处理模块化,也不会用于大型项目,但它可以使用各种插件来编译 html.css.js 等资源. 不清楚如何使用 gulp 开启任务的朋友可以参考 gulp使 ...
- Mybatis开发中的常用Maven配置
Mybatis导入Maven配置 <!-- MyBatis导入 --> <dependency> <groupId>org.mybatis</groupId& ...
- coredns使用etcd
前言 CoreDNS使用ETCD存储主机记录.etcd安装略过. Corefile内容 .:53 { # 绑定本机IP bind 192.168.1.2 # etcd地址 etcd { path /c ...
- [Python]数组基础
在python中,一般使用列表表示数组.例如: 一维数组 arr1 = [1,2,3,4] 二维数组 arr2 = [[1,2,3,4],[5,6,7,8]] 数组的常用操作 追加 利用append( ...
- 形象谈JVM-第三章-即时编译器优化技术
即时编译器优化技术一览: 相信许多同学看完这个表格,脑子里面嗡嗡的,这些名字也是晦涩难懂,要实现这些优化的技术确实有比较大的难度,但是咱们只是学习,去理解这些技术,其实并不难,下面咱们直接开讲. 首先 ...
- H.265+SRS6.0服务器部署
H.265+SRS6.0服务器部署 SRS从6.0开始,全面支持H.265,包括RTMP.FLV.HLS.GB28181.WebRTC等等.具体的服务器部署及H.265推流步骤如下. 1. SRS 要 ...