У меня есть файл xlsm (Excel с макросами).
Я открываю его на C# с помощью Spire.xls, вношу изменения, сохраняю.
Теперь весь VBA, модули, классы и код форм исчезли.
Spire ничего не делает с макросами, но я надеялся, что он хотя бы сохранит то, что уже было.
У меня есть код VBA для импорта макросов, но он не работает для модулей классов.
Я думаю, что мог бы переписать это, чтобы работать с другой книгой, если бы мне пришлось.
Но я надеюсь на что-то, что я смогу использовать непосредственно из С#.
Не имеет значения, скопирую ли я сначала файл, а затем просто использую spire, чтобы сохранить его, или использую SaveToFile от spire.
Образец кода:
File.Copy(sourceFileName, targetFileName);
// Load the base worksheet
Workbook baseWorkbook.LoadFromFile(targetFileName);
/* or */ Workbook baseWorkbook.LoadFromFile(sourceFileName);
// do some stuff with the workbook
baseWorkbook.Save();
/* or */ baseWorkbook.SaveToFile(targetFileName, FileFormat.Version2016);
В любом случае, я получаю файл с кодом 0.
В качестве альтернативы я мог бы преобразовать его для использования Interop.Excel, но он не может копировать объединенные ячейки.
@SolarMike Да, и исходный, и целевой файлы имеют формат xlsm. Но, что интересно, если вы попытаетесь открыть его, if выдаст исключение, поскольку на самом деле в нем нет никаких макросов. Изменение расширения на xlsx позволяет открыть его.
Файл будет сохранен как файл .xlsx, если вы укажете формат файла FileFormat.Version2016. Чтобы сохранить макросы, вы можете сохранить файл в файле .xlsm, указав формат файла как FileFormat.Xlsm.
@DheerajMalik Это исправлено. Можете ли вы преобразовать это в ответ, чтобы я мог его принять? Обратите внимание, что если вы снова сохраните файл позже, он все равно удалит макросы. Вы можете только сделать SaveAsFile.
@BWhite Спасибо, я разместил это как ответ. При сохранении файлов я рекомендую всегда использовать метод SaveToFile(), даже если он сохраняется в тот же файл.
Файл будет сохранен как файл .xlsx, если вы укажете формат файла FileFormat.Version2016. Чтобы сохранить макросы, вы можете сохранить файл в файле .xlsm, указав формат файла как FileFormat.Xlsm.
Он сохраняется как .xlsm?