3
我有幾張Excel圖表,我想用Python導出爲圖像。每張圖表都在一張單獨的Excel文件中,只有一張。該腳本適用於幾乎所有的圖表:Python win32 Excel將圖表粘貼爲位圖(PasteSpecial)?
import win32com.client as win32
from win32com.client import Dispatch
xl = Dispatch('Excel.Application')
xl.Visible = True
wb = xl.Workbooks.Open("C:\\test.xlsx")
xl.DisplayAlerts = False
chart = wb.Worksheets(1).ChartObjects(1)
chart.CopyPicture()
#Create new temporary sheet (after first sheet)
xl.ActiveWorkbook.Sheets.Add(After=xl.ActiveWorkbook.Sheets(1)).Name="temp_sheet"
temp_sheet = xl.ActiveSheet
#Add chart object to new sheet.
cht = xl.ActiveSheet.ChartObjects().Add(0,0,chart.Width, chart.Height)
#Paste copied chart into new object
cht.Activate() # dit is bij de topsheets nodig, anders plakt die een wit vlak... (bij trends en staafjes hoeft het niet)
cht.Chart.Paste()
#Export image
cht.Chart.Export("C:\\test.png")
temp_sheet.Delete()
xl.ActiveWorkbook.Close()
#Restore default behaviour
xl.DisplayAlerts = True
我有一個圖表但不能出口......我得到的導出功能後此錯誤:
pywintypes.com_error: (-2147352567, 'Exception occurred.', (0, None, None, None, 0, -2147287037), None)
圖表複製到臨時工作表,但導出失敗。在導出此圖寫了一些舊的Excel VBA代碼,我看這樣行:
ActiveSheet.PasteSpecial Format:="Bitmap", Link:=False,
DisplayAsIcon:=False
什麼是Python等同?這:
cht.Chart.PasteSpecial(Format="Bitmap")
不工作(AttributeError的: '' 對象有沒有屬性 'PasteSpecial的')
- 編輯 -
「剪貼板評論」 從Xukrao指出我在另一方向。在本教程https://www.penwatch.net/cms/images_from_excel/的幫助下,我使用了PIL中的ImageGrab。導出圖表正在工作! :)
import win32com.client as win32
from win32com.client import Dispatch
xl = Dispatch('Excel.Application')
xl.Visible = True
wb = xl.Workbooks.Open("C:\\test.xlsx")
xl.DisplayAlerts = False
chart = wb.Worksheets(1).ChartObjects(1)
chart.CopyPicture()
#Create new temporary sheet (after first sheet)
xl.ActiveWorkbook.Sheets.Add(After=xl.ActiveWorkbook.Sheets(1)).Name="temp_sheet"
temp_sheet = xl.ActiveSheet
xl.ActiveSheet.PasteSpecial()
# Use PIL (python imaging library) to save from Windows clipboard
# to a file
wb.Worksheets(2).Pictures(1).Copy()
image = ImageGrab.grabclipboard()
image.save('blabla.bmp','bmp')
#This line is not entirely neccessary since script currently exits without
saving
temp_sheet.Delete()
xl.ActiveWorkbook.Close()
#Restore default behaviour
xl.DisplayAlerts = True
我使用這條線時,出現此錯誤:pywintypes.com_error:(-2147352567,「異常發生。',(0,u'Microsoft Excel',u'PasteSpecial方法的工作表類失敗。',u'xlmain11.chm',0,-2146827284),無) – Joost
該錯誤的最可能的原因是剪貼板尚未包含圖表。 – Xukrao
我認爲圖表在剪貼板中,因爲當我使用這一行時:xl.ActiveSheet.PasteSpecial()將圖表粘貼到臨時表單上。然而,不是位圖格式,我需要... – Joost