EPPlus - добавление рабочего листа делает недействительной цифровую подпись в файле макроса VBA - PullRequest
0 голосов
/ 10 марта 2020

У меня есть файл Excel, содержащий код VBA, я подписал этот код VBA сертификатом. Однако прежде чем отправить этот файл своим пользователям, я делаю несколько изменений в файле программно, таких как добавление / удаление вкладок, добавление данных и т. Д. c ... Я использую Epplus для достижения этой цели, я НЕ изменяю какие-либо из Код VBA в файле, однако, я обнаружил, что, когда я выполняю определенные действия в Epplus, подпись становится недействительной, в частности, следующий код, приведенный ниже, сделает недействительной подпись файлов (добавление таблицы):

using (ExcelPackage xlPackage = new ExcelPackage(fiNew))
{
    xlPackage.Workbook.Worksheets.Add("Test");
    xlPackage.Save();
}

Это сложно, я уверен, что смогу go по этому маршруту и перезаписать файл каждый раз, когда я вносил в него изменения, однако это кажется излишним. Выполнение того же действия в Excel НЕ делает файл недействительным, я не уверен, почему EPPlus делает.

Есть ли способ добавить рабочий лист в документ Excel, не отменяя подпись файлов?

Обновление 1

У меня была такая же проблема при попытке удалить рабочий лист с Epplus Мне пришлось прибегнуть к обходному решению, используя Open XML, похоже, это работает:

public static void DeleteSheet(string fileName, string sheetName)
{
    using (SpreadsheetDocument document = SpreadsheetDocument.Open(fileName, true))
    {
        // Get the SheetToDelete from workbook.xml
        var theSheet = document.WorkbookPart.Workbook.Descendants<Sheet>().FirstOrDefault(s => s.Name == sheetName);

        if (theSheet == null)
        {
            return;
        }

        // Remove the sheet reference from the workbook.
        var worksheetPart = (WorksheetPart)(document.WorkbookPart.GetPartById(theSheet.Id));
        theSheet.Remove();

        // Delete the worksheet part.
        document.WorkbookPart.DeletePart(worksheetPart);
    }
}
...