FEATURED · 精选文章

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

发布时间 / 2026/9/10 23:14:51
来源 / 创域科博编辑部
栏目 / 资讯中心
「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
RELATED — 相关阅读

相关资讯

LATEST — 最新资讯

最新发布

TODAY — 本日精选

新闻

WEEKLY — 本周精选

新闻

MONTHLY — 本月精选

新闻