[英]Export Charts from Excel as images using Python
我一直在尝试将 Excel 中的图表导出为 Python 中的图像文件(JPG 或 ING)。 我在看 WIn32com。 这是我迄今为止所拥有的。
import win32com.client as win32
excel = win32.gencache.EnsureDispatch("Excel.Application")
wb = excel.Workbooks.Open("<WORKSHEET NAME>")
r = wb.Sheets("<SHEET NAME>").Range("A1:J50")
# Here A1:J50 is the area over which cart is
r.CopyPicture()
这就是我被困的地方。 我现在需要将所选范围复制到文件中。 对文档的任何帮助或指示都可以帮助我很多。
我已经基于以下 VBA 脚本对上述代码进行了建模:
Sub Export_Range_Images()
' =========================================
' Code to save selected Excel Range as Image
' =========================================
Dim oRange As Range
Dim oCht As Chart
Dim oImg As Picture
Set oRange = Range("A1:B2")
Set oCht = Charts.Add
oRange.CopyPicture xlScreen, xlPicture
oCht.Paste
oCht.Export FileName:="C:\temp\SavedRange.jpg", Filtername:="JPG"
End Sub
代码片段来自: http : //vbadud.blogspot.com/2010/06/how-to-save-excel-range-as-image-using.html
我必须查看一些 VBA 示例才能使其正常工作。 虽然我讨厌回答我自己的问题,但我还是把它留在这里给可能需要它的人。
import win32com.client as win32
wb = excel.Workbooks.Open(excel_file)
selection = "A1:J30"
xl_range = wb.Sheets(<sheet_name>).Range(selection)
excel.ActiveWorkbook.Sheets.Add( After=excel.ActiveWorkbook.Sheets(3)).Name="image_sheet"
cht = excel.ActiveSheet.ChartObjects().Add(0,0,
xl_range.Width, xl_range.Height)
xl_range.CopyPicture()
# add the chart to new sheet
cht.Chart.Paste()
# Export the sheet with the chart to a new file
cht.Chart.Export(<image_filename>)
# Delete the sheet
cht.Delete()
excel.ActiveSheet.Delete()
# Close the book
excel.ActiveWorkbook.Close()
我知道这是一个老问题,但它帮助我走上正轨,所以我回来分享我完成的脚本,该脚本在工作表中找到所有图表并将它们导出为 .png。 上面的脚本可以工作,但由于它只是复制工作表中的一个范围,因此您依赖于恰好位于该位置的图形。
import win32com.client as win32
from win32com.client import Dispatch
import os
xlApp = Dispatch('Excel.Application')
workbook = xlApp.Workbooks.Open("Book1.xls")
xlApp.Sheets("Sheet1").Select()
xlSheet1 = xlApp.Sheets(1)
#WARNING: The following line will cause the script to discard any unsaved changes in your workbook
#Ensure to save any work before running script
xlApp.DisplayAlerts = False
i = 0
for chart in xlSheet1.ChartObjects():
print chart.Name
chart.CopyPicture()
#Create new temporary sheet
xlApp.ActiveWorkbook.Sheets.Add(After=xlApp.ActiveWorkbook.Sheets(3)).Name="temp_sheet" + str(i)
temp_sheet = xlApp.ActiveSheet
#Add chart object to new sheet.
cht = xlApp.ActiveSheet.ChartObjects().Add(0,0,800, 600)
#Paste copied chart into new object
cht.Chart.Paste()
#Export image
cht.Chart.Export("chart" + str(i) + ".png")
#This line is not entirely neccessary since script currently exits without saving
temp_sheet.Delete()
i = i+1
xlApp.ActiveWorkbook.Close()
#Restore default behaviour
xlApp.DisplayAlerts = True
对我来说,这很有效:
from win32com.client import Dispatch
app = Dispatch("Excel.Application")
workbook_file_name = 'Programmes.xlsx'
workbook = app.Workbooks.Open(Filename=workbook_file_name)
# WARNING: The following line will cause the script to discard any unsaved changes in your workbook
app.DisplayAlerts = False
i = 1
for sheet in workbook.Worksheets:
for chartObject in sheet.ChartObjects():
# print(sheet.Name + ':' + chartObject.Name)
chartObject.Chart.Export("chart" + str(i) + ".png")
i += 1
workbook.Close(SaveChanges=False, Filename=workbook_file_name)
或这个:
from win32com.client import Dispatch
app = Dispatch("Excel.Application")
workbook_file_name = 'Programmes.xlsx'
workbook = app.Workbooks.Open(Filename=workbook_file_name)
app.DisplayAlerts = False
try:
workbook.SaveAs(Filename="ExcelCharts.htm", FileFormat=44) # 44 = html file format
except Exception as ex:
print(ex)
finally:
workbook.Close(SaveChanges=False, Filename=workbook_file_name)
现在我会推荐 excel2img 库,它对我很有用。 确保你已经安装了它(pip install excel2img)
import excel2img
excel2img.export_img("test.xlsx", "test.gif", "Sheet1", "MyNamedRange")
如果您不需要网格线 - 只需将其隐藏在 excel 中。
git rep: excel2img了解更多信息。
我尝试使用以下命令,但在 excel 中没有任何更新。 文件以只读方式打开? 代码可能有什么问题。
import win32com.client as win32
from win32com.client import Dispatch
import os
xlApp = Dispatch('Excel.Application')
workbook = xlApp.Workbooks.Open(r'C:\Users\eshsubh\Documents\EKN\DL MS1.xls')
xlApp.Sheets("Sheet2").Select()
xlSheet1 = xlApp.Sheets(1)
xlApp.DisplayAlerts = False
i = 0
for chart in xlSheet1.ChartObjects():
print (chart.Name)
chart.CopyPicture()
#Create new temporary sheet
xlSheet1.ActiveWorkbook.Sheets.Add(After=xlSheet1.ActiveWorkbook.Sheets(3)).Name="temp_sheet" + str(i)
xlSheet1 = sheet_ranges.ActiveSheet
#Add chart object to new sheet.
cht = xlSheet1.ActiveSheet.ChartObjects().Add(0,0,800, 600)
#Paste copied chart into new object
cht.Chart.Paste()
#Export image
cht.Chart.Export("chart" + str(i) + ".png")
#This line is not entirely neccessary since script currently exits without saving
temp_sheet.Delete()
i = i+1
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.