Запуск макроса VBA в Spotfire с помощью Ironpython

Поэтому я бы попросил просить в этом потоке IronPython – запустить макрос Excel, но у меня недостаточно репутации.

Поэтому, грубо следуя приведенному в ссылке коду, я создал некоторый код, который сохранил бы файл в определенном месте, затем откройте рабочую книгу, которая существует там, вызывая макрос внутри него, который будет выполнять небольшое количество манипуляций с данными, которые я загруженный в .xls, чтобы сделать его более презентабельным.

Теперь я выделил проблему для этой части кода (см. Ниже).

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() 

Правильно, поэтому я отвечаю на свой собственный вопрос, но надеюсь, что это поможет кому-то. Таким образом, приведенный выше код, насколько мне известно, был прекрасен, но не очень хорошо работал с настройкой моей среды 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, который я использую выше, и просто настроить ваш макрос на автоматический запуск.

Interesting Posts

отличная сводная таблица максимальный объем данных

Как окрашивать повторяющиеся группы ячеек разного цвета?

Формула copy-paste Python xlwings с относительными ссылками на ячейки

Excel: использование форм, созданных с помощью редактора VB, для фильтрации диапазона дат на листе

Размещение более короткой вкладки charachter в vba

TALEND – вывод столбца для вывода по имени

Как настроить вычисление приложения для определения пользователем в Excel VBA?

Скрыть диапазон меток данных в «пироге пирога» в Excel

Код, необходимый для циклического изменения диапазона столбцов, проверить, существует ли значение, а затем копировать ячейки

Выбор диапазона данных на скрытом листе без .Activate

Excel VBA-код для перемещения листов с обновлением экрана изображения и ошибок

Создайте новый лист и создайте таблицу внутри

Как избежать ошибки во время выполнения, когда рабочий лист защищен в MS-Excel?

ADODB – почему мой набор записей доступен только для чтения?

Суммируйте сначала три (или четыре) непустых ячейки в строке

Давайте будем гением компьютера.