python自动生成word报表之使用win32com插入自带可编辑的图表 |
您所在的位置:网站首页 › 建立三维柱形圆柱图 › python自动生成word报表之使用win32com插入自带可编辑的图表 |
解决问题
在做word报告自动生成过程中,想使用python向word中插入office自带的可以编辑的图表,查看python-docx v0.8.10文档还未实现该功能,考虑使用win32com。 前置知识 了解word编程时的几个主要对象和类,包括 Application对象:应用 Document对象:文档 Selection对象:选区 更多类别查阅文档:https://docs.microsoft.com/zh-cn/dotnet/api/microsoft.office.interop.word?view=word-pia了解宏录制功能,通过查看宏编辑器里的VBA代码,了解操作使用了哪些对象和方法这些前置知识可以参考文章https://zhuanlan.zhihu.com/p/67543981,主要解决思路来源于此。通过在word中录制宏可以了解大部分操作对象,本人使用office365版本的word程序不能录制生成图表和编辑图表的操作。 具体思路win32模块安装: pip install pypiwin32 考虑了两种实现思路: 思路一:从Excel应用中将图表copy至wordExcel本身对图表创建和操作相对更方便,且在Ecxel中可以录制创建、编辑等对图表的操作,方便查看使用的对象和方法。 该方法需要分别打开一个Word应用和Excel应用。 步骤数据准备: Excel文件中保存生成图表的测试数据。在word文档中插入书签,此处方便选择图表插入位置。也可调用Selection对象设置插入位置,具体可参考官方文档说明。![]() 具体代码如下: import win32com from win32com.client import Dispatch docApp = win32com.client.Dispatch('Word.Application') excelAPP = win32com.client.Dispatch('Excel.Application') docApp.Visible = True docApp.DisplayAlerts = 0 excelAPP.Visible = True excelAPP.DisplayAlerts = 0 doc = docApp.Documents.Open('test.docx') excel = excelAPP.Workbooks.Open('test.xlsx') # 设置生成图表类型及数据范围 # AddChart2方法说明详见思路二 excel_chart = excel.ActiveSheet.Shapes.AddChart2(201, 51) excel_chart.Chart.SetSourceData(Source=excel.ActiveSheet.Range("A1:D4")) # 设置图表样式,此处仅为简单示例,具体需求可通过录制宏参考调用的对象及其属性 excel_chart.Chart.ChartTitle.Text = '测试标题' excel_chart.Chart.FullSeriesCollection(3).Format.Fill.ForeColor.ObjectThemeColor = 10 # 将excel中的图表复制粘贴到word中 excel_chart.Copy() doc.Bookmarks("插入图表位置").Select() # docApp.Selection.Paste() # 直接粘贴,一般默认为使用目标主题和链接数据 docApp.Selection.PasteAndFormat(16) # 保留所粘贴材料的原始格式 doc.Save() doc.Close() excel.Save() excel.Close() docApp.Quit() excelAPP.Quit() 思路二:直接在word中插入图表不需要打开Excel应用,直接在Word中调用图表对象。 步骤数据准备: 在word文档中插入书签,此处方便选择图表插入位置。也可调用Selection对象设置插入位置,具体可参考官方文档说明。具体代码如下: import win32com from win32com.client import Dispatch docApp = win32com.client.Dispatch('Word.Application') docApp.Visible = True docApp.DisplayAlerts = 0 doc = docApp.Documents.Open('test.docx') # 创建图表,图表的插入位置为预先在word文档中插入的书签,书签名为“插入图表位置” shape_chart = doc.Shapes.AddChart2(Style=201, Type=51, Top=doc.Bookmarks("插入图表位置").Select()) shape_chart.WrapFormat.Type = 7 # 设置图表为嵌入型 # 设置Word中的图表 chart = shape_chart.Chart worksheet = chart.ChartData.Workbook.Worksheets(1) #图表数据对应的工作表 chart.SetSourceData("Sheet1!$A$1:$C$4") # 设置数据源范围 # 簇状柱形图测试数据 chart_data = [["","系列A","系列B","系列C","系列D"], [2020,2,4,2,3], [2019,4,5,3,2]] # 清空工作表默认数据 worksheet.Range("A1:D5").value = None # 填入测试数据 for row_index,row in enumerate(chart_data): for column_index,value in enumerate(row): worksheet.Cells(row_index+1,column_index+1).Value = value chart.SetSourceData("Sheet1!$A$1:$E$3") # 设置数据源范围 # 设置图表样式示例 chart.ChartTitle.Text = '测试标题' # 设置标题 chart.FullSeriesCollection(2).Format.Fill.ForeColor.ObjectThemeColor = 10 #设置系列2的填充颜色 chart.ChartData.Workbook.Close() # 关闭workbook窗口 doc.Save() doc.Close() docApp.Quit()使用AddChart2方法时,word文档中已插入默认图表,如图所示。 其中,添加图表的方法AddChart2参数考链接,图表类型对应的代码参考链接(或直接参考文末“附录-图表对应代码”)。 插入图表效果如下: |
CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3 |