- 批量生成word文档,保留文档格式。
from docx import Document
import os
import glob
import pandas as pd
#读取excel表,sheet_name是sheet名
tab1 = pd.read_excel(r"D:\\桌面文件\\test.xlsx", sheet_name="客户清单", dtype=str)
#查看列名
col=tab1.columns.tolist()
names=tab1['姓名'].tolist()
#取序号列,用于文件命明和循环次数
numb=tab1['序号'].tolist()
#循环替换文本 len(numb)
for i in range(0,len(numb)):
name=tab1['姓名'].loc[i] #提取姓名 .iloc[:,1:3]
#print(name)
th1=tab1['替换列'].loc[i] #提取需要替换上去的文本内容
je=tab1['金额'].loc[i] #提取需要替换的金额
# 示例1的文档中有3个地方需要替换,替换一为客户信息占位符,替换二为姓名占位符,替换三为金额替换符。
# 示例2的文档中有1个地方需要替换,替换二为姓名占位符
document = Document("D:\\桌面文件\\示例1.docx")
document_sh = Document("D:\\桌面文件\\示例2.docx")
for paragraph in document.paragraphs:
for run in paragraph.runs:
if '替换一' in run.text: # 替换为你要查找的文本
run.text = run.text.replace('替换一', th1) # 替换为你要替换后的文本
if '替换二' in run.text: # 替换为你要查找的文本
run.text = run.text.replace('替换二', name) # 替换为你要替换后的文本
if '替换三' in run.text: # 替换为你要查找的文本
run.text = run.text.replace('替换三', je) # 替换为你要替换后的文本
for paragraph_sh in document_sh.paragraphs:
for run_sh in paragraph_sh.runs:
if '替换二' in run_sh.text: # 替换为你要查找的文本
run_sh.text = run_sh.text.replace('替换二', name) # 替换为你要替换后的文本
#保存文件名
filename=numb[i]+"、示例1:"+name+".docx"
filename_sh=numb[i]+"、示例2:"+name+".docx"
#print(filename)
# 拼接保存地址
new_file_path =os.path.join('D:\\示例1', filename)
new_file_path_sh =os.path.join('D:\\示例2', filename_sh)
#保存
document.save(new_file_path )
document_sh.save(new_file_path_sh )
- 批量合并word文档,保留文档格式,合并从新的一页开始。
import os
from docx import Document
from docxcompose.composer import Composer
original_docx_path='D:/商务智能/实验报告/'
new_docx_path='D:/商务智能/商务智能实验报告合并件.docx'
#提取文件夹下所有文件名
all_word=os.listdir(original_docx_path)
#拼接全部文件的list,如果需要可以对all_word进行排序,使用sorted()或sort()函数
all_file_path=[]
for file_name in all_word:
all_file_path.append(original_docx_path+file_name)
#打开第一份文件
master=Document(all_file_path[0])
#将第一份文件作为模板
middle_new_docx=Composer(master)
num=0
#遍历合并所有word文件
for word in all_file_path:
word_document=Document(word)
#添加分页符函数add_page_break
word_document.add_page_break()
if num!=0:
middle_new_docx.append(word_document)
num=num+1
#保存
middle_new_docx.save(new_docx_path)
声明第2段代码来源:https://fkxxgis.blog.csdn.net/article/details/117718274?spm=1001.2101.3001.6650.18&utm_medium=distribute.pc_relevant.none-task-blog-2%7Edefault%7EBlogCommendFromBaidu%7ERate-18-117718274-blog-125653568.235%5Ev43%5Epc_blog_bottom_relevance_base3&depth_1-utm_source=distribute.pc_relevant.none-task-blog-2%7Edefault%7EBlogCommendFromBaidu%7ERate-18-117718274-blog-125653568.235%5Ev43%5Epc_blog_bottom_relevance_base3&utm_relevant_index=26
- word文档转pdf文档
import comtypes.client
def doc_to_pdf(doc_path, pdf_path):
# 创建Word应用程序对象
word = comtypes.client.CreateObject('Word.Application')
word.Visible = 0 # 不显示Word界面
# 打开Word文档
doc = word.Documents.Open(doc_path)
# 将文档保存为PDF格式
doc.SaveAs(pdf_path, FileFormat=17) # 17代表PDF格式
# 关闭文档和Word应用程序
doc.Close()
word.Quit()
# 释放COM对象
del doc
del word
# 使用函数转换文档
doc_path = 'D:/商务智能/商务智能实验报告合并件.docx'
pdf_path = 'D:/商务智能/商务智能实验报告合并件.pdf'
doc_to_pdf(doc_path, pdf_path)
- pdf文档删除某一页
from PyPDF2 import PdfReader, PdfWriter
def remove_page_from_pdf(input_pdf_path, output_pdf_path, page_to_remove):
# 打开PDF文件
pdf_input = PdfReader(input_pdf_path)
# 创建一个新的PDF writer对象
pdf_output = PdfWriter()
# 遍历PDF的每一页
num_pages = len(pdf_input.pages)
for page_index in range(num_pages):
# 如果不是要删除的页码,则添加到输出的PDF
if page_index + 1 != page_to_remove:
pdf_output.add_page(pdf_input.pages[page_index])
# 写入新的PDF,移除了指定页
with open(output_pdf_path, 'wb') as out:
pdf_output.write(out)
# 使用函数,删除第3页
remove_page_from_pdf('D:/商务智能/商务智能实验报告合并件.pdf', 'D:/商务智能/output.pdf', 3)
5.合并pdf
import os
import PyPDF2
filenames=[]
#待合并pdf所在路径
dn_dirs = os.listdir(r'D:\商务智能')
while 'Thumbs.db' in dn_dirs:
#移除Thumbs文件
dn_dirs.remove('Thumbs.db')
#按_前面的值排序
dn_dirs.sort(key=lambda x: int(x.split('_')[0]))
for _dir in dn_dirs:
#判断是否是pdf
if os.path.splitext(_dir)[1] == '.pdf':
dir_path = os.path.join('D:\商务智能', _dir)
filenames.append(dir_path)
#合并
merger=PyPDF2.PdfFileMerger()
for filename in filenames:
merger.append(PyPDF2.PdfFileReader(filename))
merger.write('D:\商务智能\整合pdf.pdf')