使用Python将图表从Excel导出为图像

我一直试图从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脚本build模上述代码:

 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

我知道这是一个老问题,但它帮助我走上正轨,所以我回来分享我的脚本,找到工作表中的所有图表,并将它们导出为.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 

我不得不看一些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() 

对我来说,这工作得很好:

 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)