python - 通过 python 使用 win32com 抓取 excel 文件中的图表对象并将其转换为图像

标签 python image charts win32com import-from-excel

我正在尝试抓取.xlsx Excel 文件中的图表对象并将其导出为图像。我发现的唯一类似的 stackoverflow 问题是 this one它试图做同样的事情。然而,该脚本似乎不起作用(即使我更正语法/方法)。 我愿意在 Python 2.7.93.4.0. 中运行它,因为我的计算机上运行着这两个版本。 这是我正在使用的代码:

import win32com.client as win32
excel = win32.gencache.EnsureDispatch('Excel.Application') 
wb = excel.Workbooks.Open(r'C:\Users\Emilyn\Desktop\chartTest.xlsx') 
excel.Visible = True
wb.Sheets("Sheet1").Select() 
wbSheetOne = wb.Sheets(1) 
wb.DisplayAlerts = False 
i = 0
    for chart in wbSheetOne.ChartObjects():
        print(chart.Name)
        chart.CopyPicture()
        excel.ActiveWorkbook.Sheets.Add(After =excel.ActiveWorkbook.Sheets(3)).Name="temp_sheet" + str(i)
        temp_sheet = wb.ActiveSheet
        cht = wb.ActiveSheet.ChartObjects().Add(0,0,800,600)
        cht.Chart.Export("chart" + str(i) + ".png")
        i = i+1
excel.ActiveWorkbook.close
wb.DisplayAlerts = True

这将打开我的 Excel 文件,在我的 documents 文件夹中生成三个 .png 图像,并为这些图像创建三个新的 工作表,但是图像都是空白的。我不确定如何才能将 Excel 文件中的图表对象正确复制到这些新创建的图像。 我将不胜感激,因为在任何地方似乎都没有关于 pywin/win32com 的深入文档。

我一直在疯狂地搜索互联网,并试图让它工作一两天......当你不知道所有可用的方法,甚至不知道什么时,很难让一些东西工作。有些方法可以。

(是的,我已经阅读了该库附带的所有“自述”文件,并阅读了他们在其网站上提供的内容。)

最佳答案

我已经弄清楚该怎么做,但我想我会将其发布给 future 的用户。

for index in range(1, count + 1):
    currentChart = wbSheet.ChartObjects(index)
    currentChart.Copy
    currentChart.Chart.Export("chart" + str(index) + ".png")

我使用计数来执行 for 循环,这样您就可以动态读取 Excel 文件中图表对象的数量。

另外,我从 1 开始范围的原因是因为 excel 中的 VB 从 1 开始对象索引,而不是零。

关于python - 通过 python 使用 win32com 抓取 excel 文件中的图表对象并将其转换为图像,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29175405/

相关文章:

python - python list(set(a)) 每次都会改变它的顺序吗?

.net - WPF ImageSource 与自定义转换器绑定(bind)

java - 如何将Android ImageButton的位图更改为R.Layout中存储的另一个位图

image - 无需悬停的 CSS3 图像转换

text - 如何在Highcharts中通过chart.renderer.text添加文本?

javascript - Google 可视化库加载会产生两个不同的结果

python - 使用 UCS-4 的 Python Swig 绑定(bind)

python - 在 CentOS 5 上安装 node.js

python - 根据其他列 pandas 填充缺失值

javascript - 如何在图表中的 X 轴上绘制日期范围?