通过 python 使用 win32com 为图表对象抓取 excel 文件并将它们转换为图像
Using win32com via python to scrape excel file for chart objects and convert them to images
我正在尝试为 chart objects
抓取 .xlsx
excel 文件并将它们导出为图像。我发现的唯一类似的 Whosebug 问题是 this one,它试图做同样的事情。但是,该脚本似乎不起作用(即使我更正了 syntax/methods)。
我愿意在 Python 2.7.9
或 3.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
图像,并为图像创建三个新的 worksheets
,但是图像都是blank.I 不确定如何才能使 excel 文件中的 chart objects
正确复制到这些新创建的图像中。
我将不胜感激,因为在任何地方似乎都没有关于 pywin/win32com
的深入文档。
我一直在疯狂地搜索 Internet 并试图让它工作一两天...当您不知道所有可用的方法时,很难让某些东西工作,或者甚至某些方法的作用。
(是的,我已经阅读了图书馆附带的所有 "read me" 文件,也阅读了他们在其网站上提供的内容。)
您将现有图表复制为图片,但不对其进行任何操作。
您插入一个工作表,不添加任何数据,然后在该工作表中嵌入一个图表,由于没有要显示的数据,该图表必须是空白的,然后将空白图表导出为 png 文件。
我已经想好了要做什么,但我想我会 post 为将来的用户做的。
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 开始对象索引,而不是零。
我正在尝试为 chart objects
抓取 .xlsx
excel 文件并将它们导出为图像。我发现的唯一类似的 Whosebug 问题是 this one,它试图做同样的事情。但是,该脚本似乎不起作用(即使我更正了 syntax/methods)。
我愿意在 Python 2.7.9
或 3.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
图像,并为图像创建三个新的 worksheets
,但是图像都是blank.I 不确定如何才能使 excel 文件中的 chart objects
正确复制到这些新创建的图像中。
我将不胜感激,因为在任何地方似乎都没有关于 pywin/win32com
的深入文档。
我一直在疯狂地搜索 Internet 并试图让它工作一两天...当您不知道所有可用的方法时,很难让某些东西工作,或者甚至某些方法的作用。
(是的,我已经阅读了图书馆附带的所有 "read me" 文件,也阅读了他们在其网站上提供的内容。)
您将现有图表复制为图片,但不对其进行任何操作。
您插入一个工作表,不添加任何数据,然后在该工作表中嵌入一个图表,由于没有要显示的数据,该图表必须是空白的,然后将空白图表导出为 png 文件。
我已经想好了要做什么,但我想我会 post 为将来的用户做的。
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 开始对象索引,而不是零。