Python全栈开发-第6章 自动化办公 第二篇 · Web开发与自动化📋 第6章 自动化办公用Python解放重复劳动,让办公效率翻倍6.1 Excel自动化用openpyxl读写Excel、创建图表、批量处理Excel自动化 – 告别手动复制粘贴每个打工人都有过这样的经历:打开一个Excel表,复制A列的数据,粘贴到B列,调整格式,设置公式,画个图表……然后下周再来一遍。如果你每个月要处理50份类似的报表,手动操作可能需要整整两天。但用Python自动化?5分钟搞定,而且零错误。openpyxl是Python操作Excel文件的利器:读取数据:遍历单元格、按行按列读取写入数据:设置值、公式、样式创建图表:柱状图、饼图、折线图格式美化:字体、颜色、边框、合并单元格让我们从一份员工工资表开始,体验Excel自动化的魔力!# pip install openpyxlfromopenpyxlimportWorkbook,load_workbookfromopenpyxl.stylesimportFont,PatternFill,Alignment,Border,Sidefromopenpyxl.chartimportBarChart,PieChart,Referencefromopenpyxl.utilsimportget_column_letterfromdatetimeimportdatetime# ========== 示例1:创建工资报表 ==========defcreate_salary_report():"""创建一份格式化的员工工资报表"""wb=Workbook()ws=wb.active ws.title="2024年1月工资表"# 定义样式header_font=Font(name="Arial",bold=True,size=12,color="FFFFFF")header_fill=PatternFill(start_color="4472C4",end_color="4472C4",fill_type="solid")header_align=Alignment(horizontal="center",vertical="center")thin_border=Border(left=Side(style="thin"),right=Side(style="thin"),top=Side(style="thin"),bottom=Side(style="thin"))# 标题行ws.merge_cells("A1:G1")ws["A1"]="XX公司 2024年1月员工工资表"ws["A1"].font=Font(name="Arial",bold=True,size=16)ws["A1"].alignment=Alignment(horizontal="center")# 表头headers=["工号","姓名","部门","基本工资","绩效奖金","扣款","实发工资"]forcol,headerinenumerate(headers,1):cell=ws.cell(row=3,column=col,value=header)cell.font=header_font cell.fill=header_fill cell.alignment=header_align cell.border=thin_border# 员工数据employees=[("E001","张三","技术部",15000,3000,800),("E002","李四","市场部",12000,2500,600),("E003","王五","财务部",13000,2000,700),("E004","赵六","技术部",18000,4000,900),("E005","钱七","市场部",11000,1800,500),("E006","孙八","技术部",20000,5000,1000),("E007","周九","人事部",10000,1500,400),("E008","吴十","技术部",16000,3500,850),]# 写入数据并设置公式fori,(eid,name,dept,base,bonus,deduct)inenumerate(employees,4):ws.cell(row=i,column=1,value=eid)ws.cell(row=i,column=2,value=name)ws.cell(row=i,column=3,value=dept)ws.cell(row=i,column=4,value=base)ws.cell(row=i,column=5,value=bonus)ws.cell(row=i,column=6,value=deduct)# 实发工资 = 基本工资 + 绩效奖金 - 扣款(用Excel公式)ws.cell(row=i,column=7).value=f"=D{i}+E{i}-F{i}"# 设置数字格式为货币forcolinrange(4,8):ws.cell(row=i,column=col).number_format='#,##0.00'ws.cell(row=i,column=col).border=thin_borderforcolinrange(1,4):ws.cell(row=i,column=col).border=thin_border ws.cell(row=i,column=col).alignment=Alignment(horizontal="center")# 汇总行last_row=4+len(employees)-1summary_row=last_row+1ws.cell(row=summary_row,column=3,value="合计")ws.cell(row=summary_row,column=3).font=Font(bold=True)forcolin[4,5,6,7]:col_letter=get_column_letter(col)ws.cell(row=summary_row,column=col).value=f"=SUM({col_letter}4:{col_letter}{last_row})"ws.cell(row=summary_row,column=col).font=Font(bold=True)ws.cell(row=summary_row,column=col).number_format='#,##0.00'# 自动调整列宽forcolinrange(1,8):ws.column_dimensions[get_column_letter(col)].width=15wb.save("salary_report.xlsx")print("工资报表已生成:salary_report.xlsx")# ========== 示例2:创建图表 ==========defcreate_chart():"""在Excel中创建柱状图和饼图"""wb=Workbook()ws=wb.active ws.title="销售数据"# 销售数据ws.append(["产品","Q1销量","Q2销量","Q3销量","Q4销量"])sales_data=[["笔记本电脑",120,150,180,200],["智能手机",300,280,350,400],["平板电脑",80,90,70,110],["智能手表",50,70,90,120],["无线耳机",200,250,300,350],]forrowinsales_data:ws.append(row)# 创建柱状图bar_chart=BarChart()bar_chart.type="col"bar_chart.title="各产品季度销量"bar_chart.y_axis.title="销量(台)"bar_chart.x_axis.title="产品"bar_chart.style=10data=Reference(ws,min_col=2,max_col=5,min_row=1,max_row=6)cats=Reference(ws,min_col=1,min_row=2,max_row=6)bar_chart.add_data(data,titles_from_data=True)bar_chart.set_categories(cats)bar_chart.width=20bar_chart.height=12ws.add_chart(bar_chart,"A8")# 创建饼图(年度总销量占比)# 先计算年度总销量ws.cell(row=7,column=1,value="年度总计")forrowinrange(2,7):ws.cell(row=row,column=6).value=f"=SUM(B{row}:E{row})"forrowinrange(2,7):ws.cell(row=row+7,column=8).value=ws.cell(row=row,column=1).value ws.cell(row=row+7,column=9).value=f"=F{row}"pie_chart=PieChart()pie_chart.title="年度销量占比"pie_chart.style=10pie_data=Reference(ws,min_col=9,max_col=9,min_row=8,max_row=13)pie_cats=Reference(ws,min_col=8,min_row=9,max_row=13)pie_chart.add_data(pie_data,titles_from_data=True)pie_chart.set_categories(pie_cats)pie_chart.width=16pie_chart.height=12ws.add_chart(pie_chart,"H8")wb.save("sales_chart.xlsx")print("销售图表已生成:sales_chart.xlsx")# 运行示例create_salary_report()create_chart()💡 技巧Excel自动化的实用技巧:使用 f-strings 生成Excel公式(如 f"=SUM(A1:A{last_row})")批量处理多个Excel文件时,用 glob.glob(“*.xlsx”) 获取所有文件路径读取大文件时用 read_only=True 模式打开,内存占用大幅减少使用 pandas 的 read_excel() 和 to_excel() 可以更高效地处理数据密集型任务🔑 核心要点核心知识点:Workbook() 创建新工作簿,load_workbook() 打开已有文件ws.cell(row, column, value) 写入单元格,ws.append(row_data) 追加一行Font、PatternFill、Alignment、Border 控制单元格样式merge_cells() 合并单元格,get_column_letter() 转换列号BarChart、PieChart 等图表类通过 Reference 绑定数据区域Excel公式以 = 开头,可以在单元格中直接写入公式字符串🧪 随堂测验在openpyxl中,如何在单元格中写入Excel公式?A. 使用 ws.formula() 方法B. 直接将公式字符串赋值给单元格的value,如 cell.value = ‘=SUM(A1:A10)’C. 使用 ws.calculate(‘SUM(A1:A10)’) 方法D. 必须先安装xlcalc插件答案解析:在openpyxl中,写入Excel公式非常简单——直接将公式字符串赋值给单元格的value属性即可。公式以等号(=)开头,和你在Excel中手动输入公式的方式完全一样。例如 cell.value = ‘=SUM(A1:A10)’ 或 cell.value = f’=D{i}+E{i}-F{i}'。Excel打开文件时会自动计算这些公式的结果。6.2 PDF处理PDF合并、拆分、文本提取与水印添加PDF处理 – 文件界的"剪刀+胶水"PDF是办公世界的"硬通货"——合同、报告、发票、论文,几乎都是PDF格式。但有时候你需要:把10个PDF合同合并成一个大文件从一个200页的报告中提取第50-60页给每页加上公司水印从PDF表格中提取数据到Excel手动操作?费时费力还容易出错。用Python?几行代码搞定!我们将使用三个强大的库:PyPDF2:PDF的"剪刀和胶水"——合并、拆分、旋转pdfplumber:PDF的"放大镜"——精准提取文本和表格reportlab:PDF的"画笔"——从零创建PDF文件# pip install PyPDF2 pdfplumber reportlabimportosfromPyPDF2importPdfMerger,PdfReader,PdfWriterfromreportlab.pdfgenimportcanvasfromreportlab.lib.pagesizesimportA4importpdfplumber# ========== 辅助函数:创建示例PDF ==========defcreate_sample_pdf(filename,title,pages=3):

相关新闻

最新新闻

SerenityOS 命令行选项解析指南:getopt 与 getopt_long 用法、返回值与底层实现

SerenityOS 命令行选项解析指南:getopt 与 getopt_long 用法、返回值与底层实现

SerenityOS 命令行选项解析指南:getopt 与 getopt_long 用法、返回值与底层实现 【免费下载链接】serenity The Serenity Operating System 🐞 项目地址: https://gitcode.com/GitHub_Trending/se/serenity 导读 本文以 getopt(3) 手册 为核心&a…

2026/9/30 14:41:37
轻量服务器还是ECS?大促云服务器选购与避坑实战指南

轻量服务器还是ECS?大促云服务器选购与避坑实战指南

每年大促节点,群里永远有人在问同一个问题:“38元的轻量服务器到底怎么抢?为什么我每次点进去都是已售罄?68元直购和99元的ECS我到底选哪个?”作为一个常年帮团队和自己采购云服务器的老用户,我太清楚这种纠…

2026/9/29 2:52:51
为 AI 代理的 Review 动作编写 Cedar 审批门控策略:review-agent-governance 策略编写实战指南

为 AI 代理的 Review 动作编写 Cedar 审批门控策略:review-agent-governance 策略编写实战指南

为 AI 代理的 Review 动作编写 Cedar 审批门控策略:review-agent-governance 策略编写实战指南 【免费下载链接】agents Multi-harness agentic plugin marketplace for Claude Code, Codex, Cursor, OpenCode, GitHub Copilot, and Google Antigravity 项目地址:…

2026/9/29 1:29:30
PaddleOCR 手写数学公式识别算法 CAN 实战指南:Counting-Aware Network 训练、评估与推理部署

PaddleOCR 手写数学公式识别算法 CAN 实战指南:Counting-Aware Network 训练、评估与推理部署

PaddleOCR 手写数学公式识别算法 CAN 实战指南:Counting-Aware Network 训练、评估与推理部署 【免费下载链接】PaddleOCR Turn any PDF or image document into structured data for your AI. A powerful, lightweight OCR toolkit that bridges the gap between i…

2026/9/29 1:39:24
Spring源码解析:构造器注入的类型转换与候选匹配机制

Spring源码解析:构造器注入的类型转换与候选匹配机制

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/9/29 22:57:57
openai-agents-python 多模型接入指南:深入解析 AnyLLMModel 适配层与 any-llm 路由

openai-agents-python 多模型接入指南:深入解析 AnyLLMModel 适配层与 any-llm 路由

openai-agents-python 多模型接入指南:深入解析 AnyLLMModel 适配层与 any-llm 路由 【免费下载链接】openai-agents-python A lightweight, powerful framework for multi-agent workflows 项目地址: https://gitcode.com/GitHub_Trending/op/openai-agents-pyth…

2026/9/29 2:52:53

日新闻

周新闻