我在想,我將不得不在Crystal Reports中運行每月報告。我讀過你可以使用COM/ActiveX實現自動化,但我並沒有先進的去理解它是什麼或者你甚至可以用它做什麼。如何處理Python中的COM/ActiveX?
我對Python非常熟悉,它看起來像我讀過的,我可能能夠打開報告,也許更改一些參數,運行它並導出它。
我也使用Excel做了很多工作,它看起來像你也使用COM/ActiveX接口。
有人可以解釋這是如何工作的,也許提供一個簡單的例子?
我在想,我將不得不在Crystal Reports中運行每月報告。我讀過你可以使用COM/ActiveX實現自動化,但我並沒有先進的去理解它是什麼或者你甚至可以用它做什麼。如何處理Python中的COM/ActiveX?
我對Python非常熟悉,它看起來像我讀過的,我可能能夠打開報告,也許更改一些參數,運行它並導出它。
我也使用Excel做了很多工作,它看起來像你也使用COM/ActiveX接口。
有人可以解釋這是如何工作的,也許提供一個簡單的例子?
首先你必須安裝精彩的pywin32模塊。
它提供COM支持。你需要運行makepy工具。它位於C:... \ Python26 \ Lib \ site-packages \ win32com \ client中。在Vista上,它必須以管理員權限運行。
此實用程序將顯示所有可用的COM對象。你可以找到你的,它會爲這個對象生成一個python包裝器。
包裝是在C:... \ Python26 \ Lib \ site-packages \ win32com \ gen_py文件夾中生成的python模塊。該模塊包含COM對象的接口。該文件的名稱是COM唯一標識。如果你有很多文件,有時很難找到合適的文件。
之後,你只需要調用正確的界面。這是神奇的:)
簡單例子與Excel
import win32com.client xlApp = win32com.client.Dispatch("Excel.Application") xlApp.Visible=1 workBook = xlApp.Workbooks.Open(r"C:\MyTest.xls") print str(workBook.ActiveSheet.Cells(i,1)) workBook.ActiveSheet.Cells(1, 1).Value = "hello" workBook.Close(SaveChanges=0) xlApp.Quit()
你基本上可以做相當於後期綁定。所以通過IDispatch暴露的東西都可以被使用。
這是我在本週末寫的一些代碼,通過Windows Image Acquisition 2.0從twain設備獲取圖像,並將數據放入我可以在基於gtk的用戶界面中推送的內容。
WIA_COM = "WIA.CommonDialog"
WIA_DEVICE_UNSPECIFIED = 0
WIA_INTENT_UNSPECIFIED = 0
WIA_BIAS_MIN_SIZE = 65536
WIA_IMG_FORMAT_PNG = "{B96B3CAF-0728-11D3-9D7B-0000F81EF32E}"
def acquire_image_wia():
wia = win32com.client.Dispatch(WIA_COM)
img = wia.ShowAcquireImage(WIA_DEVICE_UNSPECIFIED,
WIA_INTENT_UNSPECIFIED,
WIA_BIAS_MIN_SIZE,
WIA_IMG_FORMAT_PNG,
False,
True)
fname = str(time.time())
img.SaveFile(fname)
buff = gtk.gdk.pixbuf_new_from_file(fname)
os.remove(fname)
return buff
這不是很漂亮,但它的工作原理。我會斷言它相當於你必須在VB中編寫的東西。
你也可以在這裏找到有用的提示: http://timgolden.me.uk/python/win32_how_do_i.html 可以很容易地適應任何類型的應用程序。
下面是創建一個文件,並增加值到小區的工作方案:
import win32com.client
import xlsxwriter
import os
cwd = os.getcwd()
file_path = cwd + "\\test.xlsx"
#Create an excel file
workbook = xlsxwriter.Workbook(file_path)
worksheet = workbook.add_worksheet()
workbook.close()
#Open an excel application
xlApp = win32com.client.Dispatch("Excel.Application")
xlApp.Visible=1
workBook = xlApp.Workbooks.Open(file_path)
print str(workBook.ActiveSheet.Cells(1,1))
workBook.ActiveSheet.Cells(1, 1).Value = "hello55"
workBook.Close(SaveChanges=1)
xlApp.Quit()
如果你得到關於未註冊的事情錯誤,請確保您使用的是32位的Python,如果你使用的是32 bit com對象。 http://python.6.x6.nabble.com/Problem-using-win32com-client-Dispatch-on-Win7-64bit-td1957248.html – Gourneau 2015-01-21 23:32:51
「import pythoncom」不是必需的 – user327843 2015-03-13 08:47:13