Spire.xls удаляет все макросы

У меня есть файл 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, но он не может копировать объединенные ячейки.

Он сохраняется как .xlsm?

Solar Mike 01.04.2023 06:24

@SolarMike Да, и исходный, и целевой файлы имеют формат xlsm. Но, что интересно, если вы попытаетесь открыть его, if выдаст исключение, поскольку на самом деле в нем нет никаких макросов. Изменение расширения на xlsx позволяет открыть его.

BWhite 02.04.2023 07:05

Файл будет сохранен как файл .xlsx, если вы укажете формат файла FileFormat.Version2016. Чтобы сохранить макросы, вы можете сохранить файл в файле .xlsm, указав формат файла как FileFormat.Xlsm.

Dheeraj Malik 03.04.2023 11:02

@DheerajMalik Это исправлено. Можете ли вы преобразовать это в ответ, чтобы я мог его принять? Обратите внимание, что если вы снова сохраните файл позже, он все равно удалит макросы. Вы можете только сделать SaveAsFile.

BWhite 05.04.2023 21:53

@BWhite Спасибо, я разместил это как ответ. При сохранении файлов я рекомендую всегда использовать метод SaveToFile(), даже если он сохраняется в тот же файл.

Dheeraj Malik 07.04.2023 12:18
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
0
5
62
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Файл будет сохранен как файл .xlsx, если вы укажете формат файла FileFormat.Version2016. Чтобы сохранить макросы, вы можете сохранить файл в файле .xlsm, указав формат файла как FileFormat.Xlsm.

Другие вопросы по теме