IronPython - 运行Excel宏

时间:2013-07-01 19:10:38

标签: excel excel-vba ironpython spotfire vba

我正在运行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

编辑 - 代码似乎来自Cannot iterate VBA macros from Python

1 个答案:

答案 0 :(得分:2)

我遇到了类似的问题(尝试从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,第二部分实际执行宏。请注意,这是从未打开的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