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组件+ ...
随机推荐
- React: 路由重定向
解决方案 参考链接 https://v5.reactrouter.com/web/example/route-config
- pandas对某列数据进行求和
求和的方式很简单,如下所示: number_of_declarations = data[4].sum()//中括号中为要求和的列
- Django2.2:UnicodeDecodeError: 'gbk' codec can't decode byte 0xa6 in position 9737: illegal multibyte sequence
报错截图: 解决方案: 打开django/views下的debug.py文件,转到line331行: with Path(CURRENT_DIR, 'templates', 'technical_50 ...
- CTF比赛中Web的php伪协议类型题小结
php协议类型 file:// - 访问本地文件系统 http:// - 访问 HTTP(s) 网址 ftp:// - 访问 FTP(s) URLs php:// - 访问各个输入/输出流(I/O s ...
- [linux]frp内网穿透
前言 假设有如下网络拓扑 A可以访问B,但B无法访问A.A和B都能访问C.如果B需要访问A的8000端口,一般有如下方法: 网络管理员做路由转发.硬件层面网络转发,性能一般来说更好,但需要熟悉路由配置 ...
- 银河麒麟v10安装达梦数据库
简介 达梦数据库是商业化的国产关系型数据库,体系架构比较像Oracle. 官方在线手册 原生安装 系统版本:银河麒麟V10服务器版 数据库版本:DM8 下载官方安装包,解压后有个ISO文件和包含sha ...
- 角度新奇!第一次看到这样使用MyBatis的,看得我一愣一愣的。
你好呀,我是歪歪. 这期给大家分享一个读者给我分享的一个关于 MyBatis 的"编程小技巧",说真的,这骚操作,直接把我看得一愣一愣的. 我更情愿叫它:坑你没商量之埋雷大法. D ...
- Linux 内核设备树时钟绑定
这种绑定依然处于开发中,并且基于 benh[1] 的一些实验性工作. 时钟信号源可以由设备树中的任何节点表示.这些节点被指定为时钟提供者.时钟消费者节点使用 phandle 和时钟指示符对将时钟提供者 ...
- AutoEmbedding论文阅读笔记
问题背景 目前推荐系统中, 在特征维度上低频特征和高频特征的维度是通过遍历mask特征获得到的auc衰减衡量特征对模型的重要度来决定的. 如果想提升模型效果, 在field层面上需要减少进行基于经验的 ...
- MQTT vs. XMPP,哪一个才是IoT通讯协议的正解
MQTT vs. XMPP,哪一个才是IoT通讯协议的正解 这是个有趣的话题! 先来聊几个小故事. 关于我和MQTT 我在人生第一个IoT项目里,第一次接触到MQTT协议. 我很快就理解了这个协议.因 ...