2011-03-14 88 views
2

我懷疑這個問題有一個簡單的答案,但我無法在任何地方找到它!我正在寫一個函數來在Excel中繪製大量數據,並且我正在用Python控制繪圖。我已經生成了所有的圖表,每張圖表都是自己的圖表,但是它們不合適。 VBA代碼爲:使用Python進行Excel win32com編程。將參數傳遞到函數

Sheets("Chart1").Move After:=Sheets(3) 

這將採取「Chart1」並將其移動到第三張紙之後。我如何在Python中做到這一點?我知道代碼是沿線︰

xlChart.Move(Before,After) 

如何告訴python的前後參數?我想最重要的是我還沒有想出如何在win32com編程中傳遞參數。

在此先感謝您的幫助!

回答

3

這裏是一個非常簡單的例子:

from win32com import client 

excel=client.Dispatch("Excel.Application") 
excel.Visible=True 
book=excel.Workbooks.Open("c:/desktop/test.xlsx", False, True) 
sheet=book.Worksheets(1) 
chart=book.Charts.Add() 
chart.SetSourceData(sheet.Range("$A:$B")) 

chart.Move(Before=book.Worksheets("Sheet2")) 
chart.Move(book.Worksheets("Sheet2"))#equivalent to previous line 
chart.Move(book.Worksheets("Sheet2"), None)#also equivalent 

chart.Move(After=book.Worksheets("Sheet2")) 
chart.Move(None,book.Worksheets("Sheet2"))#equivalent to previous line 

我試圖展現各種選項來處理這與Excel的COM編程的重要問題可選參數。您可以使用位置參數傳遞並從結尾省略參數。或者你可以通過相當於None。最後,你可以使用命名參數。

+0

這是一個完美的解釋!非常感謝!我終於明白如何處理可選參數。 – JCR 2011-03-15 01:01:07

+0

如果您嘗試將'None'傳遞給'int'參數,'Range.BorderAround'調用將失敗。按照我的理解,應該傳遞'pythoncom.Empty'來省略參數。 – Winand 2016-01-29 11:25:12

+0

如果我需要將一些數據從sheet1工作簿1複製到sheet2工作簿2,那又如何呢?我知道如何在sheet2之前或sheet2之後執行此操作,但在sheet2中怎麼辦? – 2017-02-24 17:48:51