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批量操作的更多相关文章

  1. python 使用win32com实现对word文档批量替换页眉页脚

    最近由于工作需要,需要将70个word文件的页眉页脚全部进行修改,在想到这个无聊/重复/没有任何技术含量的工作时,我的内心是相当奔溃的.就在我接近奔溃的时候我突然想到完全可以用python脚本来实现这 ...

  2. jeecms系统使用介绍——通过二次开发实现对word、pdf、txt等上传附件的全文检索

    转载请注明出处:http://blog.csdn.net/dongdong9223/article/details/76912307 本文出自[我是干勾鱼的博客] 之前在文章<基于Java的门户 ...

  3. python如何实现对word内段落文本及表格的读取

    在以下方法中用到的三方库是:python-docx from docx import Document 获取指定段落的文本 def get_paragraph_text(path, n): " ...

  4. 基于Python实现对PDF文件的OCR识别

    http://www.jb51.net/article/89955.htm https://pythontips.com/2016/02/25/ocr-on-pdf-files-using-pytho ...

  5. 【POI word】使用POI实现对Word的读取以及生成

    项目结构如下: 那第一部分:先是读取Word文档 package com.it.WordTest; import java.io.FileInputStream; import java.io.Fil ...

  6. C#实现对Word文件读写[转]

    手头上的一个项目报表相对比较简单,所以报表打印采用VBA引擎,通过定制Word模版,然后根据模版需要填充数据,然后OK,打印即可. 实现方法:首先需要引用VBA组建,我用的是Office2003 Pr ...

  7. 利用Python实现对Web服务器的目录探测

    今天是一篇提升技能的干货分享,操作性较强,适用于中级水平的小伙伴,文章阅读用时约3分钟. PART 1/Python Python是一种解释型.面向对象.动态数据类型的高级程序设计语言. Python ...

  8. 利用 python 实现对web服务器的目录探测

    一.pythonPython是一种解释型.面向对象.动态数据类型的高级程序设计语言.python 是一门简单易学的语言,并且功能强大也很灵活,在渗透测试中的应用广泛,让我们一起打造属于自己的渗透测试工 ...

  9. 利用COM组件实现对WORD书签处写入值

    using System; using System.Collections.Generic; using System.Text; using Microsoft.Office.Interop.Wo ...

  10. 利用COM组件实现对WORD书签各种操作大全,看这一篇就够了

    有个需求是,程序导出一份word报告,报告中有各种各样的表格,导出时还需要插入图片. 脑海中迅速闪过好几种组件,openxml组件,com组件,npoi.为了减少程序画复杂表格,我们选用了com组件+ ...

随机推荐

  1. Bootstrap使用方法

    中文文档:https://www.bootcss.com/ 使用方式: 1.选择对应的文档:  2.网站会自动跳转,一般选择Bootstrap3中文文档:  3.点击入门,下拉找到基础模板,复制代码到 ...

  2. 代码随想录算法训练营第三天| LeetCode 242.有效的字母异位词 349. 两个数组的交集 1. 两数之和

    242.有效的字母异位词       卡哥建议: 这道题目,大家可以感受到数组用来做哈希表给我们带来的遍历之处.  题目链接/文章讲解/视频讲解: https://programmercarl.com ...

  3. 你一定要知道的iterator和generator

    generator是一种特殊的iterator,generator可以替代iterator实现,使代码更为简洁 什么是iterator iterator叫做迭代器,是用来帮助某个数据结构进行遍历的对象 ...

  4. 如何在达梦数据库中追踪慢SQL

    在达梦数据库中,我们可以通过开启日志记录和设置最小执行时间来追踪慢SQL.下面是具体的步骤: 1. 修改dm.ini文件 使用以下命令编辑dm.ini文件: cd /home/dmdba/dmdbms ...

  5. MySQL高级9-锁

    一.简介 锁是计算机协调多个进程或线程并发访问某一资源的机制.在数据库中,除了传统的计算资源(CPU.RAM.i/O)的挣用以外,数据也是一种供许多用户共享的资源.如何保证数据并发访问的一致性,有效性 ...

  6. Go开始:Go基本元素介绍

    本文深入探讨了Go编程语言中的核心概念,包括标识符.关键字.具名函数.具名值.定义类型.类型别名.包和模块管理,以及代码块和断行.这些元素是构成Go程序的基础,也是编写高质量代码的关键. 关注Tech ...

  7. springboot3框架搭建

    Spring Boot 3.0.0已经发布一段时间了,越来越多的公司考虑将技术框架升级到最新版本,JDK也相应要求JDK17以上.对应Spring Boot 2.x的版本,建议先升级到Spring B ...

  8. IDEA 配置桌面快捷方式

    IDEA 配置桌面快捷方式 目录 IDEA 配置桌面快捷方式 1.下载idea.tar解压 2.配置快捷方式 3.为什么要存放在这个目录? 1.下载idea.tar解压 tar xf ideaIC-2 ...

  9. PYQT5学习(13):QMidArea同时显示多个窗口,创建多个独立的窗口

    QMidArea  参考文章:https://blog.csdn.net/jia666666/article/details/81670569 一种同时显示多个窗口的方法,创建多个独立的窗口,这些独立 ...

  10. 4-MySQL数据库的常用操作

    在MySQL数据库中,增删改查操作是指对数据进行添加.删除.查询和修改的操作.这些操作在数据库管理和维护中非常重要,可以帮助数据库管理员和开发人员有效地管理数据和实现各种复杂的数据处理需求. 添加数据 ...