ClosedXML Добавить рабочий лист с условным форматированием

Я использую ClosedXML, чтобы добавить новый лист в существующий документ Excel. Он отлично работает для нормального документа Excel.

Но если в листе Excel содержится условное форматирование в какой-либо ячейке, он выдает ошибку

at System.Collections.Generic.Dictionary`2.get_Item(TKey key)
   at ClosedXML.Excel.XLCFConverters.Convert(IXLConditionalFormat conditionalFormat, Int32 priority, SaveContext context)
   at ClosedXML.Excel.XLWorkbook.GenerateWorksheetPartContent(WorksheetPart worksheetPart, XLWorksheet xlWorksheet, SaveContext context)
   at ClosedXML.Excel.XLWorkbook.CreateParts(SpreadsheetDocument document)
   at ClosedXML.Excel.XLWorkbook.CreatePackage(String filePath, SpreadsheetDocumentType spreadsheetDocumentType)
   at ClosedXML.Excel.XLWorkbook.SaveAs(String file)

Ниже приведен пример кода

using (var excelDoc = new ClosedXML.Excel.XLWorkbook(strFilePath))
{
    excelDoc.Worksheets.Add("New Result Sheet");                    
    excelDoc.SaveAs(strFilePathSave);
}

Пожалуйста, помогите, как решить эту проблему.

1 ответ

XlsIO - это библиотека.NET, которая читает и записывает файлы Excel 2003/2007/2010/2013/2016. Используя XlsIO, вы можете легко добавлять / изменять листы с условным форматированием без проблем. Весь набор элементов управления доступен бесплатно (коммерческие приложения также) через лицензионную программу сообщества, если вы подходите. Лицензия сообщества является полным продуктом без ограничений и водяных знаков.

Шаг 1. Создайте консольное приложение

Шаг 2: Добавьте ссылку на Syncfusion.XlsIO.Base и Syncfusion.Compression.Base, вы также можете добавить эти ссылки в свой проект, используя NuGet.

Шаг 3: Скопируйте и вставьте следующий фрагмент кода.

В следующем фрагменте кода показано, как добавить лист с условным форматированием с помощью XlsIO.

using (ExcelEngine excelEngine = new ExcelEngine())
{
    //Instantiate the excel application object.
    IApplication application = excelEngine.Excel;

    application.DefaultVersion = ExcelVersion.Excel2013;

    //Open the workbook
    IWorkbook workbook = application.Workbooks.Open("Input.xlsx");

    (workbook.Worksheets as WorksheetsCollection).Add("NewSheet");

    IWorksheet worksheet = workbook.Worksheets[1];

    IConditionalFormats condition = worksheet.Range["A1"].ConditionalFormats;

    IConditionalFormat condition1 = condition.AddCondition();

    condition1.FormatType = ExcelCFType.CellValue;

    condition1.Operator = ExcelComparisonOperator.Between;

    condition1.FirstFormula = "10";

    condition1.SecondFormula = "20";

    condition1.BackColor = ExcelKnownColors.Red; 

    worksheet.Range["A1"].Number = 13;

    //Save the workbook
    workbook.SaveAs("AddedWorkbook.xlsx");
}

Пожалуйста, ознакомьтесь с примером для достижения этого сценария, и образец может быть загружен из следующего местоположения.

Скачать демо

Для получения дополнительной информации о XlsIO, пожалуйста, обратитесь к нашей справочной документации

Примечание: я работаю на Syncfusion

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