2009-06-30 13 views
26

私はCrystal Reportsで毎月のレポートを実行する必要があると思っています。私はCOM/ActiveXでこれを自動化できるとお伝えしましたが、これが何であるか、それをどうすることができるのかを理解するためにはそれほど進んでいません。PythonでCOM/ActiveXを使って何ができますか?

私はPythonにかなり精通していて、私が読んだことのように見えます。多分、パラメータを変更して実行してエクスポートしてください。

またExcelで多くの作業を行い、COM/ActiveXを使用してインターフェイスするようにも見えます。

誰かがこの仕組みを説明し、簡単な例を提供できますか?

答えて

31

まず、素晴らしいpywin32モジュールをインストールする必要があります。

これはCOMサポートを提供します。 makepyユーティリティを実行する必要があります。これはC:... \ Python26 \ Lib \ site-packages \ win32com \ clientにあります。 Vistaでは、管理者権限で実行する必要があります。

このユーティリティは、使用可能なすべてのCOMオブジェクトを表示します。あなたはあなたのものを見つけることができ、このオブジェクト用のPythonラッパーを生成します。

ラッパーは、C:... \ Python26 \ Lib \ site-packages \ win32com \ gen_pyフォルダで生成されたPythonモジュールです。モジュールには、COMオブジェクトのインターフェイスが含まれています。ファイルの名前はCOMの一意のIDです。ファイル数が多い場合は、適切なファイルを見つけるのが難しい場合があります。

その後、適切なインターフェイスを呼び出すだけです。 http://timgolden.me.uk/python/win32_how_do_i.html それは、あらゆる種類のアプリケーションに適応するのは簡単です:それはあなたがここにも便利なヒントを見つけることができますエクセル

 
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() 
+0

あなたが登録されていないことについて、エラーを取得している場合は、32を使用している場合、あなたは32ビットのPythonを使っていることを確認してくださいビットコムオブジェクト。 http://python.6.x6.nabble.com/Problem-using-win32com-client-Dispatch-on-Win7-64bit-td1957248.html – Gourneau

+0

「import pythoncom」は不要です – user327843

+0

「import pythoncom」が修正されました必要ない – luc

3

あなたは基本的にレイトバインディングに相当することができます。したがって、IDispatchを介して公開されているものはすべて消費することができます。

ここでは、Windows Image Acquisition 2.0を使用してtwainデバイスからイメージを取得し、gtkベースのUIで押し込むことができるデータにこのコードを書きました。

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で書く必要があるものと同等であると主張します。

6

と魔法:)

短い例です。ここで

+0

+1を指すために+1 – Blauohr

1

は、ファイルを作成し、セルに値を追加する作業のソリューションです:

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() 
関連する問題