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组件+ ...
随机推荐
- SQL Server 内存占用较高 - 清除缓存 或 设置内存最大占用值
SQL Server对服务器内存的使用策略是用多少内存就占用多少内存,只用在服务器内存不足时,才会释放一点占用的内存,所以SQL Server 服务器内存往往会占用很高 查看内存状态: DBCC Me ...
- .Net Web API 005 Controller上传小文件
1.附属文件对象定义 一般情况下,系统里面的文件都会附属一个对象存在,例如用户的头像文件,会附属用户对象存在.邮件中的文件会附属邮件存在.所以在系统里面,我们会创建一个附属文件对象,命名为Attach ...
- Datahub稳定版本0.10.4安装指南(独孤风版本)
大家好,我是独孤风,大数据流动的作者. 曾几何时,我在第一次安装JDK环境的时候也遇到了不小的麻烦,当时还有朋友就因为这个环境问题觉得自己根本不是编程的料,选择了放弃.当时有个段子说,"如果 ...
- 部署安装kafka集群
准备 zookeeper节点: 172.50.13.103 172.50.13.104 172.50.13.105 kafka版本: 2.13-2.7.0 安装步骤 部署安装zookeeper集群.参 ...
- openssh傻瓜式一键自动化更新脚本(ubuntu系统)
鉴于openssh升级太过麻烦,这里自制了一个openssh自动化升级脚本,以root权限一键运行脚本即可: sh openssh-update.sh 注意:这里只使用于ubuntu系统,centos ...
- Room组件的用法
一.Android官方ORM数据库Room Android采用Sqlite作为数据库存储.但由于Sqlite代码写起来繁琐且容易出错,因此Google推出了Room,其实Room就是在Sqlite上面 ...
- [ABC129E] Sum Equals Xor
2023-01-15 题目 题目传送门 翻译 翻译 难度&重要性(1~10):4 题目来源 AtCoder 题目算法 dp/模拟 解题思路 我们都知道,异或是一种不进位的加法,而要想 $ a ...
- springboot下载文件 范围下载
springboot下载文件 范围下载 关键词:springboot,download,Range,Content-Range,Content-Length,http code 206 Partial ...
- Llama2-Chinese项目:3.2-LoRA微调和模型量化
提供LoRA微调和全量参数微调代码,训练数据为data/train_sft.csv,验证数据为data/dev_sft.csv,数据格式为"<s>Human: "+ ...
- 给网站添加xml地图索引写法和应用
使用php给网站添加xml地图索引写法 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 ...