Запуск макроса VBA в Spotfire с помощью Ironpython
Поэтому я бы попросил просить в этом потоке IronPython – запустить макрос Excel, но у меня недостаточно репутации.
Поэтому, грубо следуя приведенному в ссылке коду, я создал некоторый код, который сохранил бы файл в определенном месте, затем откройте рабочую книгу, которая существует там, вызывая макрос внутри него, который будет выполнять небольшое количество манипуляций с данными, которые я загруженный в .xls, чтобы сделать его более презентабельным.
Теперь я выделил проблему для этой части кода (см. Ниже).
- IronPython Excel для JSON или другого объекта
- ironpthon excel interop условное форматирование
- IronPython - запуск макроса Excel
- Python - дилемма IronPython
- Запись xlsx-файлов в Iron Python
Spotfire обычно не настолько информативен, но мне очень мало здесь. Кажется, что это связано с .NET, но это все, что я могу сказать.
Сообщение об ошибке
Traceback (последний последний вызов): Файл «Spotfire.Dxp.Application.ScriptSupport», строка неизвестна, в ExecuteForDebugging File «", строка неизвестна, в StandardError: исключение было выбрано целью вызова.
Сценарий
from Spotfire.Dxp.Data.Export import DataWriterTypeIdentifiers from System.IO import File, Directory import clr clr.AddReference("Microsoft.Office.Interop.Excel") import Microsoft.Office.Interop.Excel as Excel excel = Excel.ApplicationClass() excel.Visible = True excel.DisplayAlerts = False workbook = ex.Workbooks.Open('myfilelocation') excel.Run('OpenUp') excel.Run('ActiveWorkbook') excel.Run('DoStuff') excel.Quit()
- Ищете бесплатный способ разработки надстроек Excel с помощью IronPython?
- IronPython Excel RTDServer
- Отменить событие закрытия Excel с помощью python и win32com
- Использование XLRD в Ironpython
- сохранить книгу с openpyxl в ironpython
- Изменение порядка рабочих листов в книге с помощью IronPython (или .NET)
- Закрыть всплывающее окно SharePoint из python
Правильно, поэтому я отвечаю на свой собственный вопрос, но надеюсь, что это поможет кому-то. Таким образом, приведенный выше код, насколько мне известно, был прекрасен, но не очень хорошо работал с настройкой моей среды spotfire. Однако после того, как я пошел на гораздо более крупный макро-подход, я смог найти решение.
На конце пятна у меня есть два поля ввода, одно из которых указывает путь к файлу, а другое – имя файла. Затем есть кнопка для запуска приведенного ниже сценария. Они объединены вместе в сценарии, но являются принципиально раздельными, так как имя файла необходимо вводить в отдельный файл, который вызывается основным макросом, чтобы он мог найти расположение файла файла.
В основном я создал три xml для достижения этого решения. Первый из них был основным, который содержал все основные материалы vba. Это будет выглядеть в папке в другом xml, который этот скрипт заполняет, чтобы найти местоположение сохранения файла, указанного в поле ввода в spotfire. Поиск последнего файла с использованием специально созданной функции, он будет запускать простую серию условных операций с цветом в значениях ячеек, о которых идет речь.
Этот скрипт заполняет два xml-файла и сообщает основному макросу, который запускается, причем этот макрос автоматически закрывает excel после его завершения.
Третий xml предназначен для ряда правил цвета, поэтому пользователь может настраивать их в зависимости от своей панели. Это дает некоторую гибкость для настройки. Не обязательно, но потенциальный запрос у какого-то пользователя, поэтому я решил победить их на удар.
В любом случае, код ниже.
from Spotfire.Dxp.Data.Export import DataWriterTypeIdentifiers from System.IO import File, Directory import clr clr.AddReference("Microsoft.Office.Interop.Excel") import Microsoft.Office.Interop.Excel as Excel from Spotfire.Dxp.Data.Export import * from Spotfire.Dxp.Application.Visuals import * from System.IO import * from System.Diagnostics import Process # Input field which takes the name of the file you want to save name = Document.Properties['NameOfDocument'] # Document property that takes the path location = Document.Properties['FileLocation'] # just to debug to make sure it parses correctly. Declaring this in the script # parameters section will mean that the escape characters of "\" will render in a # unusable way whereas doing it here doesn't. Took me a long time to figure that out. print(location) # Gives the file the correct extension. # Couldn't risk leaving it up to the user. newname = name + ".xls" #Join the two strings together into a single file path finalProduct = location + "\\" + newname #initialises the writer and filtering schema writer = Document.Data.CreateDataWriter(DataWriterTypeIdentifiers.ExcelXlsDataWriter) filtering = Document.ActiveFilteringSelectionReference.GetSelection(table).AsIndexSet() # Writes to file stream = File.OpenWrite(finalProduct) # Here I created a seperate xls which would hold the file path. This # file path would then be used by the invoked macro to find the correct folder. names = [] for col in table.Columns: names.append(col.Name) writer.Write(stream, table, filtering, names) stream.Close() # Location of the macro. As this will be stored centrally # it will not change so it's okay to hardcode it in. runMacro = "File location\macro name.xls" # uses System.Diagnostics to run the macro I declared. This will look in the folder I # declared above in the second xls, auto run a function in vba to find the most # up to date file p = Process() p.StartInfo.FileName = runMacro p.Start()
Короче говоря: для запуска макроса excel из пятна одно решение – использовать метод system.dianostics, который я использую выше, и просто настроить ваш макрос на автоматический запуск.