3

TIBCO Spotfire v4 を実行しています。IronPython が組み込まれています。.xls ファイルをエクスポートする Spotfire レポートを実行しようとしています (その部分は完了しています)。Excel ファイルを開き、マクロを実行してファイルをフォーマットできるスクリプトを探しています。

ここに私が見つけて使ってみたいくつかのコードがあります。輸入品の産地がわからない!

import os, os.path, win32com.client

def run_macro(fName, macName, path=os.getcwd()):
    """ 
    pre: fName is the name a valid Excel file with macro macName
    post: fName!macName is run, fName saved and closed
    """ 
    fName = os.path.join(path, fName) 
    xlApp = win32com.client.Dispatch("Excel.Application") 
    fTest = xlApp.Workbooks.Open(fName) 
    macName = fTest.Name + '!' + macName xlApp.Run(macName) 
    fTest.Close(1)
    xlApp.Quit() 
    xlApp = None

EDITOR - コードはPython から VBA マクロを反復できません

4

1 に答える 1

3

同様の問題があり(ipyからExcel VBAマクロを実行しようとしました)、最終的には機能しました。

このコードを試してください:

# .net access
import clr
clr.AddReference("Microsoft.Office.Interop.Excel")

# opening the workbook
excel = Excel.ApplicationClass()   
excel.Visible = True
excel.DisplayAlerts = False   
workbook = excel.Workbooks.Open(r"C:\your\file\here.xls")
# or open locally:
# workbook = ex.Workbooks.Open('here.xls')

# running the macro
excel.Run('YOUR-MACRO-NAME')

# closing down
excel.Exit()

最初のセクションでは .NET を使用し、2 番目のセクションでは実際にマクロを実行しています。これは、開いていない Excel ファイルから Excel コードを実行するためのものであることに注意してください。すでに開いているファイルからマクロを実行したい場合 (私もやらなければならなかったことなので、ここに入れておくべきだと思いました)、それを開くのではなく、アクティブなオブジェクトとして認識する必要があります (下)。マクロを実行するコードは、上記と同じです。

# recognizing an already opened window
from System.Runtime.InteropServices import Marshal
excel = Marshal.GetActiveObject("Excel.Application")

このリンクは、解決策を探していたときに非常に役立ちました。

http://www.ironpython.info/index.php?title=Interacting_with_Excel

于 2014-08-13T18:27:29.653 に答える