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,第二部分实际执行宏。请注意,这是从未打开的 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 回答