Python自动化操作Excel/Word/PDF的实战指南
作者:HappyAcmen
在现代办公环境中,我们经常需要处理各种文档格式,如Excel表格、Word文档和PDF文件,下面我们就来看看如何使用Python自动化进行相关操作吧
在现代办公环境中,我们经常需要处理各种文档格式,如Excel表格、Word文档和PDF文件。手动处理这些文档不仅耗时,而且容易出错。Python提供了多个强大的库来实现文档处理的自动化,本文将重点介绍如何使用openpyxl和docx库来操作Excel和Word文档,并简要介绍PDF处理的方法。
一、Python操作Excel:openpyxl库
1. 安装openpyxl
pip install openpyxl
2. 基本操作
创建工作簿和工作表
from openpyxl import Workbook # 创建工作簿 wb = Workbook() # 获取默认激活的工作表 ws = wb.active # 设置工作表标题 ws.title = "员工数据" # 创建新工作表 ws1 = wb.create_sheet("部门统计") # 插入在最后 ws2 = wb.create_sheet("薪资汇总", 0) # 插入在第一个位置 # 保存工作簿 wb.save("公司数据.xlsx")
读取和写入数据
from openpyxl import load_workbook # 加载现有工作簿 wb = load_workbook('公司数据.xlsx') # 选择工作表 ws = wb['员工数据'] # 写入数据 ws['A1'] = '员工ID' ws['B1'] = '姓名' ws['C1'] = '部门' ws['D1'] = '薪资' # 批量写入数据 data = [ [1, '张三', '技术部', 15000], [2, '李四', '市场部', 12000], [3, '王五', '财务部', 13000], [4, '赵六', '技术部', 16000] ] for row in data: ws.append(row) # 读取数据 for row in ws.iter_rows(min_row=2, max_row=5, values_only=True): print(f"员工{row[1]} 在{row[2]}部门,薪资为{row[3]}") # 保存更改 wb.save('公司数据.xlsx')
高级功能:公式、样式和图表
from openpyxl.styles import Font, Alignment, PatternFill from openpyxl.chart import BarChart, Reference # 设置标题行样式 bold_font = Font(bold=True, size=12) fill = PatternFill(fill_type="solid", fgColor="DDDDDD") align_center = Alignment(horizontal="center") for cell in ws[1]: cell.font = bold_font cell.fill = fill cell.alignment = align_center # 添加公式计算平均薪资 ws['E1'] = '平均薪资' ws['E2'] = '=AVERAGE(D2:D5)' # 创建图表 chart = BarChart() chart.title = "部门薪资对比" chart.x_axis.title = "员工" chart.y_axis.title = "薪资" data = Reference(ws, min_col=4, min_row=1, max_row=5) categories = Reference(ws, min_col=2, min_row=2, max_row=5) chart.add_data(data, titles_from_data=True) chart.set_categories(categories) ws.add_chart(chart, "G2") wb.save('公司数据_增强.xlsx')
二、Python操作Word:python-docx库
1. 安装python-docx
pip install python-docx
2. 基本操作
创建文档和添加内容
from docx import Document from docx.shared import Inches, Pt from docx.enum.text import WD_ALIGN_PARAGRAPH # 创建新文档 doc = Document() # 添加标题 doc.add_heading('公司季度报告', 0) # 添加段落 p = doc.add_paragraph('本季度公司业绩表现良好,各部门均完成了既定目标。') p.add_run('特别是技术部门').bold = True p.add_run(',超额完成了项目开发任务。') # 添加二级标题 doc.add_heading('部门业绩详情', level=2) # 添加表格 table = doc.add_table(rows=1, cols=3) table.style = 'Table Grid' # 设置表头 hdr_cells = table.rows[0].cells hdr_cells[0].text = '部门' hdr_cells[1].text = '目标完成率' hdr_cells[2].text = '同比增长' # 添加数据 data = [ ['技术部', '120%', '15%'], ['市场部', '95%', '8%'], ['财务部', '100%', '5%'] ] for dept, rate, growth in data: row_cells = table.add_row().cells row_cells[0].text = dept row_cells[1].text = rate row_cells[2].text = growth # 添加分页符 doc.add_page_break() # 添加另一个章节 doc.add_heading('下一步计划', level=2) doc.add_paragraph( '1. 扩大技术团队规模', style='List Number' ) doc.add_paragraph( '2. 开拓新市场', style='List Number' ) doc.add_paragraph( '3. 优化财务管理流程', style='List Number' ) # 保存文档 doc.save('季度报告.docx')
读取和修改现有文档
from docx import Document # 打开现有文档 doc = Document('季度报告.docx') # 读取内容 full_text = [] for paragraph in doc.paragraphs: full_text.append(paragraph.text) print('\n'.join(full_text)) # 修改内容 for paragraph in doc.paragraphs: if '技术部门' in paragraph.text: paragraph.text = paragraph.text.replace('技术部门', '研发中心') # 保存修改后的文档 doc.save('季度报告_修改版.docx')
三、Python操作PDF
1. 常用PDF处理库
- PyPDF2:用于拆分、合并、裁剪和转换PDF页面
- pdfminer:用于提取PDF中的文本和元数据
- ReportLab:用于创建PDF文档
- pdfkit:将HTML转换为PDF(基于wkhtmltopdf)
2. 基本PDF操作示例
合并PDF文件
import PyPDF2 def merge_pdfs(paths, output): pdf_writer = PyPDF2.PdfWriter() for path in paths: pdf_reader = PyPDF2.PdfReader(path) for page in range(len(pdf_reader.pages)): pdf_writer.add_page(pdf_reader.pages) with open(output, 'wb') as out: pdf_writer.write(out) # 使用示例 merge_pdfs(['file1.pdf', 'file2.pdf'], 'merged.pdf')
提取PDF文本
from pdfminer.high_level import extract_text text = extract_text('document.pdf') print(text)
四、实战案例:自动化生成报告
下面是一个综合案例,演示如何从Excel读取数据,然后生成Word报告和PDF报告。
from openpyxl import load_workbook from docx import Document import pdfkit # 1. 从Excel读取数据 wb = load_workbook('公司数据.xlsx') ws = wb.active dept_data = {} for row in ws.iter_rows(min_row=2, values_only=True): dept = row[2] salary = row[3] if dept not in dept_data: dept_data[dept] = { 'count': 0, 'total_salary': 0, 'max_salary': 0 } dept_data[dept]['count'] += 1 dept_data[dept]['total_salary'] += salary if salary > dept_data[dept]['max_salary']: dept_data[dept]['max_salary'] = salary # 计算平均薪资 for dept in dept_data: dept_data[dept]['avg_salary'] = dept_data[dept]['total_salary'] / dept_data[dept]['count'] # 2. 生成Word报告 doc = Document() doc.add_heading('公司部门统计报告', 0) # 添加摘要段落 doc.add_paragraph( f本报告基于员工数据统计分析,共涵盖{len(dept_data)}个部门。' ) # 添加表格 table = doc.add_table(rows=1, cols=4) table.style = 'Table Grid' # 表头 hdr_cells = table.rows[0].cells hdr_cells[0].text = '部门' hdr_cells[1].text = '员工数' hdr_cells[2].text = '平均薪资' hdr_cells[3].text = '最高薪资' # 表格数据 for dept, data in dept_data.items(): row_cells = table.add_row().cells row_cells[0].text = dept row_cells[1].text = str(data['count']) row_cells[2].text = f"{data['avg_salary']:.2f}" row_cells[3].text = str(data['max_salary']) doc.add_paragraph('\n报告生成时间:2023年11月1日') doc.save('部门统计报告.docx') # 3. 转换为PDF # 需要先安装wkhtmltopdf并设置路径 # path_wkhtmltopdf = r'C:\Program Files\wkhtmltopdf\bin\wkhtmltopdf.exe' # config = pdfkit.configuration(wkhtmltopdf=path_wkhtmltopdf) # pdfkit.from_file('部门统计报告.docx', '部门统计报告.pdf') # 注意:这种方法需要docx能正确转换为HTML print("报告生成完成!")
五、总结
本文介绍了使用Python操作Excel、Word和PDF文件的基本方法:
- openpyxl 提供了强大的Excel操作功能,可以创建、读取、修改工作簿,支持公式、样式和图表
- python-docx 使得Word文档的创建和修改变得简单,支持段落、表格、样式等元素
- PDF处理可以使用多个库,根据需求选择合适的工具
通过这些工具,我们可以实现办公文档处理的自动化,大大提高工作效率和准确性。在实际应用中,可以根据具体需求组合使用这些库,构建复杂的文档处理流程。
以上就是Python自动化操作Excel/Word/PDF的实战指南的详细内容,更多关于Python自动化办公的资料请关注脚本之家其它相关文章!