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);
}

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


person user581453    schedule 06.06.2016    source источник


Ответы (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.

person Dillibabu Nandhagopal    schedule 07.06.2016
comment
Я не собираюсь использовать это. Если вы знаете, как исправить/обойти это в ClosedXML, это будет очень полезно. - person user581453; 14.06.2016