У меня есть файл 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);
}
}