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