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は、Excel 2003/2007/2010/2013/2016 ファイルを読み書きする .NET ライブラリです。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 に答える