2

我正在使用 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);
}

请帮助如何解决此问题。

4

1 回答 1

-2

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 工作

于 2016-06-07T09:23:57.110 回答