【自动化实战】Python操作Excel/WORD/PDF:openpyxl与docx库详解

在现代办公环境中,我们经常需要处理各种文档格式,如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_fontcell.fill = fillcell.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().cellsrow_cells[0].text = deptrow_cells[1].text = raterow_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 PyPDF2def 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[page])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_texttext = 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.activedept_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'] += 1dept_data[dept]['total_salary'] += salaryif 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().cellsrow_cells[0].text = deptrow_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能正确转换为HTMLprint("报告生成完成!")

五、总结

本文介绍了使用Python操作Excel、Word和PDF文件的基本方法:

  1. openpyxl 提供了强大的Excel操作功能,可以创建、读取、修改工作簿,支持公式、样式和图表
  2. python-docx 使得Word文档的创建和修改变得简单,支持段落、表格、样式等元素
  3. PDF处理可以使用多个库,根据需求选择合适的工具

通过这些工具,我们可以实现办公文档处理的自动化,大大提高工作效率和准确性。在实际应用中,可以根据具体需求组合使用这些库,构建复杂的文档处理流程。

六、进一步学习资源

  • openpyxl官方文档:https://openpyxl.readthedocs.io/
  • python-docx官方文档:https://python-docx.readthedocs.io/
  • PyPDF2文档:https://pypi.org/project/PyPDF2/
  • ReportLab文档:https://www.reportlab.com/docs/reportlab-userguide.pdf

通过掌握这些库的使用,你将能够处理大多数办公自动化场景,从简单的数据提取到复杂的报告生成,都能得心应手。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/diannao/98061.shtml
繁体地址,请注明出处:http://hk.pswp.cn/diannao/98061.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

构建安全的自动驾驶:软件测试中的编码规范与AI验证

自动驾驶不再只是未来想象,它正在以惊人的速度走向现实。但这一变革也带来了软件开发的全新命题。与传统车辆不同,自动驾驶依赖复杂的AI模型、传感系统和车载决策单元,必须应对更多现实环境的不确定性。在强监管、高风险、快节奏的背景下&…

2025高教社数学建模国赛C题 - NIPT的时点选择与胎儿的异常判定(完整参考论文)

基于机器学习与统计模型的NIPT检测优化与异常判定问题研究 摘要 非侵入性产前检测(NIPT)作为一种无创安全的胎儿染色体异常筛查技术,在现代产前医疗中发挥着重要作用,其准确性与检测时机及异常判定的科学性直接影响临床决策。然而,男胎Y染色体浓度受孕周数、孕妇BMI等多…

一种基于注解与AOP的Spring Boot接口限流防刷方案

1. 添加Maven依赖<dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><dependency><groupId>org.springframework.boot</groupI…

代码随想录二刷之“贪心算法”~GO

简单题目 1.455. 分发饼干 - 力扣&#xff08;LeetCode&#xff09; func findContentChildren(g []int, s []int) int {sort.Ints(g)sort.Ints(s)index : 0for i : 0;i<len(s);i{if index < len(g) && g[index] < s[i]{index}}return index }感悟&#xff…

Pod自动重启问题排查:JDK 17 EA版本G1GC Bug导致的应用崩溃

Pod自动重启问题排查:JDK 17 EA版本G1GC Bug导致的应用崩溃 问题背景 在生产环境中,我们遇到了一个严重的稳定性问题:应用Pod频繁自动重启,导致服务不稳定。通过深入分析JVM崩溃日志,最终定位到是JDK 17 EA版本中G1GC的一个已知Bug导致的。 问题现象 1. Pod重启表现 应…

HTML文本格式化标签

HTML提供了多种标签用于文本的格式化&#xff0c;这些标签可以改变文本的外观&#xff08;如粗细、斜体&#xff09;或赋予文本特定的含义&#xff08;如强调、引用&#xff09;。1. 基本文本样式标签&#xff08;1&#xff09;粗体文本使用<b>或<strong>标签可以使…

数据结构之单链表和环形链表的应用(二)-

目录一、相交链表二、环形链表I三、环形链表II总结一、相交链表 相交链表 首先理解什么是链表相交&#xff0c;相交即存在共用的节点&#xff0c;链表相交有三种情况&#xff0c; 中间位置相交头部就开始相交尾部相交 如图pcurA和pcurB就都有一个next指针指向同一个节点 这…

属性关键字

属性关键字深拷贝与浅拷贝类型各类对象深浅拷贝判断完全深拷贝的实现属性关键字property、synthesize和dynamic原子操作读写权限内存管理strong &#x1f19a; copy总结深拷贝与浅拷贝 先前学习OC时已经对深浅拷贝进行了一次学习&#xff0c;这里进行一个复习总结和补充&#…

突发奇想,还未实践,在Vben5的Antd模式下,将表单从「JS 配置化」改写成「模板可视化」形式(豆包版)

在 Vben5 的 Antd 模式下&#xff0c;完全可以将表单从「JS 配置化」改写成「模板可视化」形式&#xff0c;把表单项直接写在 Vue 模板中&#xff0c;更直观且符合传统 Vue 开发习惯。以下是完整的改写示例&#xff0c;保留原功能但结构更清晰&#xff1a; 改写思路 放弃 JS 中…

【更新完毕】2025数学建模国赛E题思路代码文章高教社杯全国大学生数学建模-AI 辅助智能体测

全部更新完毕 包含完整的文章全部问题的代码、结果、图表 完整内容请看文末最后的推广群基于AI姿态识别的立定跳远运动分析与个性化训练优化研究 随着《国家学生体质健康标准》的颁布实施&#xff0c;通过AI技术辅助体育运动分析已成为提升学生体质健康水平的重要手段。本研究针…

小白友好,无需基础也能快速上手的AI部署工具,一键部署

AI大模型相信已经成为许多人工作和生活中的得力助手。然而&#xff0c;对于大多数普通用户而言&#xff0c;将强大的AI模型部署到自己的电脑上&#xff0c;似乎是一项遥不可及的技术活&#xff0c;往往涉及到复杂的命令行操作、环境配置和代码调试。那有没有一种工具&#xff0…

《Python复刻植物大战僵尸开源项目实战:Pygame框架+JSON关卡设计,解锁塔防游戏开发新技能》​

&#x1f4cc; 大家好&#xff0c;我是智界工具库&#xff0c;每天分享好用实用且智能的开源项目&#xff0c;以及在JAVA语言开发中遇到的问题&#xff0c;如果本篇文章对您有所帮助&#xff0c;请帮我点个小赞小收藏小关注吧&#xff0c;谢谢喲&#xff01;&#x1f618; 博主…

CCS——将工程中的 include / lib 修改为相对路径,方便工程分享

在使用 Code Composer Studio (CCS) 开发 DSP 或 ARM 工程时&#xff0c;经常会遇到这样一个问题&#xff1a;在 A 电脑上能正常编译的工程&#xff0c;拷贝到 B 电脑上后就报错。错误的原因通常是 工程使用了绝对路径&#xff0c;而不同电脑上的文件路径不一致&#xff0c;比如…

java解析网络大端、小端解析方法

文章目录一、背景介绍二、说明核心概念&#xff1a;什么是字节序&#xff08;Endianness&#xff09;&#xff1f;大端字节序 (Big-Endian)小端字节序 (Little-Endian)三、不同解析方式介绍一、背景介绍 中转台通过SNMP协议V1\V2上报中转台IP&#xff0c;然后程序解析入库&…

【数据分享】土地利用矢量shp数据分享-甘肃

今天要说明数据就是土地利用shp数据分享-甘肃。数据介绍▲ 1km土地利用数据&#xff08;2020年&#xff09;▲ 土地利用数据&#xff08;2025年&#xff09;▲土地利用数据&#xff08;2018年&#xff09;▲ 30m土地利用数据&#xff08;2023年&#xff09;▲ 公路铁路道路河流…

java log相关:Log4J、Log4J2、LogBack,SLF4J

目录测试maven依赖logback.xml测试主程序测试输出arthas查看logger总结使用参考文档测试 maven依赖 <dependencies><!-- SLF4J API --><dependency><groupId>org.slf4j</groupId><artifactId>slf4j-api</artifactId><version>…

AES加密算法详细加密步骤代码实现--身份证号码加解密系统

系统概述 本系统是一个基于AES-256-CBC加密算法的身份证号码加解密工具&#xff08;手搓底层步骤&#xff09;&#xff0c;针对的是上一篇文章对的AES加密原理的讲解&#xff0c;虽说是演示&#xff0c;但功能完善&#xff0c;可单独提供接口给项目调用&#xff0c;采用Python…

LangChain: Models, Prompts 模型和提示词

获取openapikey #!pip install python-dotenv #!pip install openai import osimport openai ​ from dotenv import load_dotenv, find_dotenv _ load_dotenv(find_dotenv()) # read local .env file openai.api_key os.environ[OPENAI_API_KEY] # account for deprecat…

ACMESSL自动续签教程

目录 1、选择申请证书 ​编辑2、选择CA机构 ​编辑3、选择自动验签 ​编辑4、证书续签设置 5、自动发布设置 本教程实现ACMESSL自动续签&#xff0c;请按照此教程实现。 1、选择申请证书 点击快捷入口或者订单或证书列表中的【创建证书】按钮&#xff1a; 2、选择CA机构 …

基于飞算JavaAI的在线图书借阅平台设计实现

项目概述与需求分析 1.1 项目背景与意义 随着数字化时代的快速发展&#xff0c;传统图书馆管理模式已无法满足现代读者的需求。在线图书借阅平台通过互联网技术将图书资源数字化&#xff0c;为读者提供便捷的检索、借阅和管理服务&#xff0c;有效解决了传统图书馆开放时间有…