如何在python-docx中生成可在Word内编辑的MS Charts?
可行解决办法
1. 直接通过COM接口操控Word生成原生可编辑图表
Windows环境下可以用pywin32库调用Word的COM对象,直接在Word里创建原生图表,这种图表完全支持Word内编辑。
安装依赖:
pip install pywin32
示例代码:
import win32com.client as win32 # 启动Word应用 word = win32.gencache.EnsureDispatch('Word.Application') word.Visible = True # 显示Word窗口,方便查看 doc = word.Documents.Add() # 添加段落 doc.Paragraphs.Add().Range.Text = "销售数据图表" # 在指定位置插入柱状图 chart_range = doc.Range() chart = doc.Shapes.AddChart(251, Left=100, Top=100, Width=400, Height=300).Chart # 设置图表数据(模拟数据) data = [ ["产品", "Q1", "Q2", "Q3"], ["A", 120, 150, 180], ["B", 90, 110, 130], ["C", 80, 100, 140] ] # 填充数据到图表的数据源 workbook = chart.ChartData.Workbook worksheet = workbook.Worksheets(1) worksheet.Range("A1:D4").Value = data workbook.Application.Quit() # 关闭Excel数据源窗口 # 保存文档 doc.SaveAs("带可编辑图表的报告.docx") # 关闭Word(可选) # word.Quit()
这种方式生成的图表是Word原生支持的,完全可以双击进入编辑模式修改数据、样式。
2. 先在Excel生成可编辑图表,再嵌入到Word
可以用openpyxl或xlsxwriter生成带图表的Excel文件,再通过pywin32将Excel图表嵌入到Word中,嵌入后的图表支持在Word内编辑数据和样式。
步骤1:用openpyxl生成带图表的Excel
from openpyxl import Workbook from openpyxl.chart import BarChart, Reference wb = Workbook() ws = wb.active # 写入数据 ws.append(["产品", "Q1", "Q2", "Q3"]) ws.append(["A", 120, 150, 180]) ws.append(["B", 90, 110, 130]) ws.append(["C", 80, 100, 140]) # 创建柱状图 chart = BarChart() data = Reference(ws, min_col=2, max_col=4, min_row=1, max_row=4) categories = Reference(ws, min_col=1, min_row=2, max_row=4) chart.add_data(data, titles_from_data=True) chart.set_categories(categories) chart.title = "季度销售数据" # 添加图表到工作表 ws.add_chart(chart, "F1") wb.save("销售数据.xlsx")
步骤2:用pywin32将Excel图表嵌入到Word
import win32com.client as win32 word = win32.gencache.EnsureDispatch('Word.Application') word.Visible = True doc = word.Documents.Add() doc.Paragraphs.Add().Range.Text = "嵌入的Excel可编辑图表" # 插入Excel图表作为OLE对象 ole_obj = doc.InlineShapes.AddOLEObject( ClassType="Excel.Chart.16", FileName="销售数据.xlsx", LinkToFile=False, # 设为True则链接到原Excel,修改原文件会同步Word DisplayAsIcon=False ) doc.SaveAs("嵌入Excel图表的报告.docx")
嵌入后的图表双击即可进入Excel编辑界面,修改后直接同步到Word。
3. 使用python-pptx生成PPT图表,再复制到Word(或直接转Word)
python-pptx支持生成PPT里的可编辑图表,你可以先在PPT里创建图表,再通过COM接口将PPT中的图表复制粘贴到Word,或者将PPT另存为Word格式(部分格式可能略有变动,但图表保持可编辑)。
示例代码(生成PPT图表):
from pptx import Presentation from pptx.chart.data import CategoryChartData from pptx.enum.chart import XL_CHART_TYPE prs = Presentation() slide = prs.slides.add_slide(prs.slide_layouts[5]) # 空白布局 # 创建图表数据 chart_data = CategoryChartData() chart_data.categories = ["Q1", "Q2", "Q3"] chart_data.add_series("产品A", (120, 150, 180)) chart_data.add_series("产品B", (90, 110, 130)) chart_data.add_series("产品C", (80, 100, 140)) # 添加柱状图到幻灯片 x, y, cx, cy = 100, 100, 400, 300 slide.shapes.add_chart( XL_CHART_TYPE.COLUMN_CLUSTERED, x, y, cx, cy, chart_data ) prs.save("带图表的演示.pptx")
之后可以手动复制PPT里的图表到Word,或者用pywin32自动完成复制粘贴操作,生成的图表在Word中依然可编辑。
内容的提问来源于stack exchange,提问作者benkyou
相关产品推荐
相关产品推荐

