「AI Agent 全栈开发 50 讲」——从本地模型部署到多智能体系统,一年省 87 万 第 18 课 | 报告自动生成:python-docx + matplotlib 生成 Word 周报

发布时间:2026/9/10 23:14:39

「AI Agent 全栈开发 50 讲」——从本地模型部署到多智能体系统,一年省 87 万 第 18 课 | 报告自动生成:python-docx + matplotlib 生成 Word 周报 第 18 课 | 报告自动生成python-docx matplotlib 生成 Word 周报第 17 课 LLM 生成了洞察但洞察是 JSON 数据——老板要的是排版精美的 Word 文档。这节课我们用 python-docx 和 matplotlib 把数据变成直接能发的周报。一、业务价值从洞察到决策1.1 洞察 ! 报告第 17 课的输出是一个 JSON 文件{insights:[{title:苹果 iOS 19 全面 AI 化,importance:高,...},...]}老板不会看 JSON。他需要的是排版精美、图表清晰、可直接转发给管理层的 Word 文档。1.2 自动化报告的价值维度人工自动化提升编写时间2-3 小时/周10 秒1000x格式一致性因人而异100% 统一品质保证图表生成手动 Excel 截图自动生成 PNG零操作修改成本重新排版改代码重新生成秒级迭代人力成本1 人/天/周0释放核心人力核心价值不是省了 2 小时而是让分析师的精力从排版中解放出来去做更有价值的深度分析。二、python-docx 基础Word 文档操控2.1 安装uv pip install python-docx matplotlib2.2 核心概念python-docx 的文档对象模型Document文档Paragraph段落Table表格Section页面设置Run文本片段含样式Row行Cell单元格关键概念Document整个 Word 文档Paragraph一个段落可以有标题样式Heading 1/2/3Run段落内的一个文本片段可以有独立的字体、颜色、加粗Table表格支持合并单元格、设置样式Section页面设置纸张大小、页边距2.3 创建文档fromdocximportDocumentfromdocx.sharedimportInches,Pt,Cm,RGBColorfromdocx.enum.textimportWD_ALIGN_PARAGRAPHfromdocx.enum.styleimportWD_STYLE_TYPE docDocument()# 标题doc.add_heading(竞品监控周报,level0)# 副标题subtitledoc.add_paragraph()subtitle.alignmentWD_ALIGN_PARAGRAPH.CENTER runsubtitle.add_run(2026年8月9日 - 2026年8月15日)run.font.sizePt(12)run.font.color.rgbRGBColor(100,100,100)# 正文段落doc.add_heading(一、本周概述,level1)doc.add_paragraph(本周科技行业焦点集中在 AI 能力升级...)# 保存doc.save(竞品监控周报.docx)2.4 表格# 创建表格tabledoc.add_table(rows5,cols4,styleLight Grid Accent 1)# 表头headers[序号,洞察标题,重要程度,分析维度]fori,headerinenumerate(headers):celltable.rows[0].cells[i]cell.textheader# 表头加粗forparagraphincell.paragraphs:forruninparagraph.runs:run.boldTrue# 填充数据foridx,insightinenumerate(insights,1):rowtable.rows[idx]row.cells[0].textstr(idx)row.cells[1].textinsight[title]row.cells[2].textinsight[importance]row.cells[3].textinsight[dimension]2.5 插入图片doc.add_picture(chart.png,widthInches(5.5))last_paragraphdoc.paragraphs[-1]last_paragraph.alignmentWD_ALIGN_PARAGRAPH.CENTER三、matplotlib 图表生成3.1 中文支持matplotlib 默认不支持中文需要配置importmatplotlib.pyplotaspltimportmatplotlib# 设置中文字体Windows 用 SimHei 或 Microsoft YaHeimatplotlib.rcParams[font.sans-serif][Microsoft YaHei,SimHei]matplotlib.rcParams[axes.unicode_minus]False# 解决负号显示问题3.2 柱状图分类分布defgenerate_category_chart(insights,output_path):生成分类分布柱状图categories{}forinsightininsights:diminsight.get(dimension,其他)categories[dim]categories.get(dim,0)1fig,axplt.subplots(figsize(8,4))colors[#4f46e5,#7c3aed,#10b981,#f59e0b]barsax.bar(categories.keys(),categories.values(),colorcolors)ax.set_title(洞察维度分布,fontsize14,fontweightbold)ax.set_ylabel(数量,fontsize12)# 在柱子上标数值forbarinbars:heightbar.get_height()ax.annotate(f{int(height)},xy(bar.get_x()bar.get_width()/2,height),xytext(0,3),textcoordsoffset points,hacenter,vabottom,fontweightbold)plt.tight_layout()plt.savefig(output_path,dpi150,bbox_inchestight)plt.close()3.3 饼图重要程度分布defgenerate_importance_pie(insights,output_path):生成重要程度饼图importance_count{}forinsightininsights:impinsight.get(importance,低)importance_count[imp]importance_count.get(imp,0)1labelslist(importance_count.keys())sizeslist(importance_count.values())explode[0.05]*len(labels)fig,axplt.subplots(figsize(6,6))colors_pie{高:#ef4444,中:#f59e0b,低:#10b981}colors_list[colors_pie.get(l,#6b7280)forlinlabels]ax.pie(sizes,explodeexplode,labelslabels,colorscolors_list,autopct%1.1f%%,shadowFalse,startangle90,textprops{fontsize:12})ax.set_title(重要程度分布,fontsize14,fontweightbold)plt.tight_layout()plt.savefig(output_path,dpi150,bbox_inchestight)plt.close()四、实战组装完整周报4.1 报告结构洞察 JSON第17课输出生成图表柱状图 饼图构建文档封面 → 概述 → 洞察 → 图表竞品监控周报.docx可直接发送4.2 完整代码概览defgenerate_report(insight_json_path,output_path):生成完整周报# 1. 加载洞察数据withopen(insight_json_path,r,encodingutf-8)asf:datajson.load(f)# 2. 生成图表chart_dirPath(output_path).parent/chartschart_dir.mkdir(exist_okTrue)generate_category_chart(data[insights],chart_dir/category.png)generate_importance_pie(data[insights],chart_dir/importance.png)# 3. 构建 Word 文档docDocument()# ... 封面、概述、洞察表格、图表 ...# 4. 保存doc.save(output_path)4.3 运行cdcode/lesson-18-docx-report uv run docx_report_generator.py输出output/竞品监控周报_2026-08-15.docx包含封面、概述、洞察表格、两张图表。五、样式美化技巧5.1 自定义样式# 自定义标题样式styledoc.styles[Heading 1]style.font.sizePt(18)style.font.color.rgbRGBColor(79,70,229)# 紫色style.font.boldTrue# 自定义正文样式styledoc.styles[Normal]style.font.sizePt(11)style.font.nameMicrosoft YaHeistyle.paragraph_format.space_afterPt(6)5.2 页眉页脚fromdocx.enum.textimportWD_ALIGN_PARAGRAPH sectiondoc.sections[0]headersection.header header_paraheader.paragraphs[0]header_para.textAI Agent 竞品监控系统 · 机密header_para.alignmentWD_ALIGN_PARAGRAPH.RIGHT footersection.footer footer_parafooter.paragraphs[0]footer_para.textf第{page_number}页六、总结能力工具效果Word 文档生成python-docx标题、段落、表格、样式图表生成matplotlib柱状图、饼图、中文支持报告组装流水线脚本洞察 图表 → 完整 Word可定制性代码控制格式、颜色、布局可任意调整至此场景一「竞品监控」的技术闭环完成爬取 → 清洗 → 增强 → 洞察 → 报告。下一课我们将加入定时任务让这套系统 7x24 小时自动运行。本课代码code/lesson-18-docx-report/docx_report_generator.py
延伸阅读

更多相关文章

2026/9/10 23:09:39

金额转人民币大写全攻略:中文数字规则与边界条件实现解析

1. 从“最简单功能”到“最稳函数”:大写金额转换为什么这么容易翻车做财务系统、ERP、报销模块、电子发票,甚至简单的记账工具,几乎都会碰到同一个需求:把阿拉伯数字金额转成人民币大写。就是那种“壹佰贰拾叁元肆角伍分”的输出。乍一看太简…

2026/9/10 23:49:43

Tracy Profiler 快速上手实战指南:4步定位游戏掉帧元凶

Tracy Profiler 快速上手实战指南:4步定位游戏掉帧元凶 【免费下载链接】tracy Frame profiler 项目地址: https://gitcode.com/GitHub_Trending/tr/tracy 你正在跑一个游戏,画面突然卡了一瞬,重跑一遍问题又消失了,日志里…

2026/9/10 23:49:42

SeaTunnel与Gravitino集成实现元数据自动化管理

1. 项目概述:当数据管道遇上元数据自动化在数据工程领域,手动维护Schema一直是ETL开发中最繁琐的环节之一。最近SeaTunnel与Gravitino的深度集成,通过RestAPI实现了元数据的自动化管理,这个看似简单的技术组合实际上解决了数据管道…

2026/9/10 23:44:42

H指数解析:学术影响力计算与应用指南

1. H指数:学术影响力的量化标尺作为一名长期跟踪学术评价指标的科研工作者,我经常需要向同行解释H指数的精妙之处。这个看似简单的数字背后,蕴含着对学者研究质量的立体化评估逻辑。2005年由物理学家Jorge Hirsch提出的H指数,如今…

2026/9/10 16:39:38

超人会飞不算本事:系统稳定依赖清晰规则与边界设计

开头先不绕弯子。“#斯坦李吐槽dc 所以超人是无缘无故会飞的嘛哈哈哈哈哈哈哈锤哥真是技术人才啊!#雷神 #复联”这类调侃式短标题,第一波冲击力在于它把两个宇宙的角色塞进同一个吐槽箱里,但细想一下就能发现,它真正碰到的根本不是…

2026/9/10 11:16:38

超人VS蜘蛛侠:拆解超级IP的影响力与传播方法论

把“蜘蛛侠 vs 超人”放在 CSDN 上聊,可能很多人第一反应是走错片场了。但如果把这两个角色看成“两个持续运营了 80 多年的文化产品”,你会发现,这场比较本质上是两个不同 IP 策略的长期结果对比:超人赢在定义了整个超级英雄题材…

2026/9/9 16:31:09

基于CNN的调制信号识别:MATLAB实现时频图分类实战

简介:本资源是一套面向通信工程与信号处理方向学习者、研究者的深度学习实践方案,聚焦调制信号自动检测与识别这一典型无线通信任务,解决传统方法依赖人工特征、低信噪比下性能下降等痛点。压缩包共12个文件(10.73MB)&…

2026/9/10 0:00:55

目录对比去重实战:用哈希算法精准清理重复文件

我电脑里现在还有一块换了三次机的“数据墓地”硬盘,里面存着2016年以前所有旧笔记本的完整备份。平时不觉得有什么,直到前阵子想把它整理归档,发现同一个安装包、同一批照片、同一份论文草稿,在几个不同的备份目录里反复出现。更…

2026/9/10 0:00:55

Leaflet离线地图完整Demo合集:内网部署与坐标纠偏实战

简介:这是一份面向Web GIS开发者的LeafLet离线地图示例合集,帮助开发者快速掌握离线地图从搭建到交互的完整流程。压缩包共723个文件,大小14.06MB,以319个js脚本、175个html页面和29个css样式文件为主体,配合png/svg图…

2026/9/10 0:00:55

MATLAB读取Rinex 3.02观测文件:多系统GNSS数据解析实战

简介:基于MATLAB开发的Rinex3.02版观测文件(o文件)读取代码包,面向卫星定位导航方向的学习者与研究人员,用于解决新版观测文件的数据解析、历元提取与时间转换问题。压缩包共4个文件,包含两个m脚本、一个19…

2026/9/10 12:32:02

USB Type-C PCB布局分区设计:电源、高速信号与PD协议全攻略

做硬件这行,Type-C接口算是典型的“看着简单,做起来全坑”的东西。光引脚就24个,高低速信号、电源、控制线全部塞在一个小小的连接器里,如果PCB布局不做规划,打样回来基本就是“插上没反应”、“高速掉线”、“静电一打…

2026/9/10 15:19:50

系统编程学习原型如何补齐稳定性边界

系统编程学习原型如何补齐稳定性边界预算有限时&#xff0c;我先优化明显多余的复制&#xff0c;而不是猜测性地换容器。用借用传递只读数据通常就能减少分配&#xff1a; fn parse(line: &str) -> Result<Item, Error> { /* ... */ }用基准确认热点确实在分配&am…

2026/9/10 15:49:53

雨花区哪家财务公司代理记账比较好?

在雨花区&#xff0c;企业处理财税事务常常面临诸多挑战&#xff0c;选择一家靠谱的财务公司至关重要。湖南巨勤财务管理咨询有限公司就是本地正规实体财税服务机构&#xff0c;深耕本地工商财税行业多年&#xff0c;熟悉当地工商局、税务局最新政策与申报流程。主营公司注册、…

还想了解更多?直接咨询顾问

免费诊断 + 免费方案 + 透明报价。

全国咨询热线400-8866-253
免费获取方案
咨询二维码