2013-07-01 2 views
2

Я запускаю TIBCO Spotfire v4. Он имеет встроенный IronPython. Предназначен для запуска отчета Spotfire, который будет экспортировать файл .xls (эта часть будет выполнена). Поиск сценария для открытия файла Excel и запуск макроса для форматирования файла.IronPython - Запуск макроса 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

Можете ли вы показать нам, что вы пробовали? –

+0

Вот код, который я нашел и попытался использовать. Не знаете, откуда взялись предметы импорта! import os, os.path, win32com.client def run_macro (fName, macName, path = os.getcwd()): "" "pre: fName - это имя действительного файла Excel с сообщением mac macName: запускается fName! macName, fName сохранено и закрыто "" "fName = os.path.join (путь, имя_файла) 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 – user2540187

+0

Похоже, что существующий ответ охватывает ваш вопрос, вы пробовали его и сделали это для вас? Если да, пожалуйста, подумайте о том, чтобы отметить это как принятый ответ или сообщить нам, что еще не совсем правильно. – RyanfaeScotland

ответ

2

У меня была аналогичная проблема (попытка запустить Excel VBA Macro из ipy), и в итоге она работала.

Попробуйте этот код:

# .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

+1

Мне пришлось прокомментировать строку DisplayAlerts, поскольку она выбрасывает исключение (видимо, известная ошибка), а также использовать excel.Quit() вместо excel.Exit(), но кроме этого это выглядит как правильный ответ +1. – RyanfaeScotland