Моя цель – добавить macros в рабочую книгу excel, не включив «Trust Access to VBA Project Object Module» в Центр доверия Excel. (Включение доступа кажется угрозой безопасности).
Найденные кусочки головоломки в моем первоначальном поиске фактов: -Я вижу, что скрипт VBA хранится в zipped-файле xlsm как vbaProject.bin. -Есть несколько свободных / коммерческих ресурсов, которые могут работать с файлами excel: Создать excel без взаимодействия и шаблона с или без строк и столбцов
Было бы неплохо просто иметь файл сценария VBA в проекте C #, который код C # извлекает и вводит в документ Excel без взаимодействия VBA. Любой быстрый / быстрый / простой / простой способ сделать это или я должен играть со свободными / коммерческими ресурсами, связанными с выше?
Использование OpenXML SDK 2.0 :
Пример кода:
using DocumentFormat.OpenXml; using DocumentFormat.OpenXml.Packaging; using DocumentFormat.OpenXml.Spreadsheet; private string partData = "..."; public void vbaInjector{ [code to create / open spreadsheet using OpenXML omitted] VbaProjectPart vbaProjectPart1 = snoreSpreadsheetDoc.WorkbookPart.AddNewPart("rId8"); System.IO.Stream data = GetBinaryDataStream(partData); vbaProjectPart1.FeedData(data); data.Close(); [code to close spreadsheet and cleanup omitted] } private System.IO.Stream GetBinaryDataStream(string base64String) { return new System.IO.MemoryStream(System.Convert.FromBase64String(base64String)); }
Я решил добавить DLL OpenXML SDK в локальную сборку проекта, чтобы конечным пользователям не пришлось самостоятельно устанавливать SDK.
Я думаю, что это можно сделать на более низком уровне, работая с XML, не используя OpenXML SDK, но я не пытался научиться этому. Если кто-нибудь сможет опубликовать код, я соглашусь на этот ответ.
Кроме того, если у вас был программный способ конвертировать скрипт VBA во встроенный файл ресурсов в двоичную строку формата Excel, можно обойтись без необходимости копировать и вставлять новую строку двоичных данных каждый раз, когда вы хотите изменить макрокод. Это было бы превосходным ответом моему.
Благодарю.
Если вы используете EPPlus, теперь вы можете включить VBA программно. Посмотреть здесь:
Запись и выполнение макросов VBA в Excel без использования Excel.Interop