代码之家  ›  专栏  ›  技术社区  ›  MoralesJosue

条件格式ClosedXML错误

  •  1
  • MoralesJosue  · 技术社区  · 9 年前

    我正在使用CloseXML将一些数据从访问导出到excel,我试图用一些日期进行条件格式化,但我得到了一个NULL异常参考错误。这是我所拥有的。

     using (OleDbConnection connection = new OleDbConnection(conecctionstring))
                {
                    string selectquery = "querystring";
    
    
                    using (OleDbDataAdapter selectCommand = new OleDbDataAdapter(selectquery, connection))
                    {
                        DtSet1 = new DataSet();
                        selectCommand.Fill(DtSet2, "Table1");
    
                        var wb = new XLWorkbook();
    
                        var saveFileDialog = new SaveFileDialog
                        {
                            Filter = "Excel files|*.xlsx",
                            Title = "Save an Excel File"
                        };
    
                        wb.Worksheets.Add(DtSet1);
    
                        wb.Range("C:C").AddConditionalFormat().WhenEqualOrGreaterThan(DateTime.Now.ToOADate()).Fill.SetBackgroundColor(XLColor.Red);
    
                        saveFileDialog.ShowDialog();
    
                        if (!String.IsNullOrWhiteSpace(saveFileDialog.FileName))
                            wb.SaveAs(saveFileDialog.FileName);
    
                    }
                }
    

    我正在使用C#、OpenXML和Access DB 感谢任何帮助。

    2 回复  |  直到 9 年前
        1
  •  1
  •   Raidri    9 年前

    原始代码中的问题是您使用 Workbook.Range("C:C") 而不是 Worksheet.Range() 。工作簿本身没有列“C”,因此这是一个无效的范围。工作代码:

    wb.Worksheet(1).Range("C:C").AddConditionalFormat().WhenEqualOrGreaterThan(DateTime.Now.ToOADate()).Fill.SetBackgroundColor(XLColor.Red);
    

    它与加载和保存文件无关。

        2
  •  0
  •   MoralesJosue    9 年前

    错误是,您必须先加载文件,然后才能对其进行任何修改,例如条件格式,然后使用当前格式再次保存文件。

    这是我的解决方案。 注意:添加了另一个条件。

     using (OleDbConnection connection = new OleDbConnection(conecctionstring))
                {
                    string selectquery = "string query";
    
                    using (OleDbDataAdapter selectCommand = new OleDbDataAdapter(selectquery, connection))
                    {
                        DtSet1 = new DataSet();
                        selectCommand.Fill(DtSet1, "Table1");
    
                        var wb = new XLWorkbook();
    
                        var saveFileDialog = new SaveFileDialog
                        {
                            Filter = "Excel files|*.xlsx",
                            Title = "Save an Excel File"
                        };
    
                        wb.Worksheets.Add(DtSet1);
    
                        saveFileDialog.ShowDialog();
    
    
                        if (!String.IsNullOrWhiteSpace(saveFileDialog.FileName))
                        {
                            wb.SaveAs(saveFileDialog.FileName);
    
                            var workbook = new XLWorkbook(saveFileDialog.FileName);
                            var ws = workbook.Worksheet(1);
    
                            ws.Range("C2:C100").AddConditionalFormat().WhenEqualOrLessThan(DateTime.Now.ToOADate()).Fill.SetBackgroundColor(XLColor.Red);
                            ws.Range("C2:C100").AddConditionalFormat().WhenGreaterThan(DateTime.Now.ToOADate() + 6).Fill.SetBackgroundColor(XLColor.Orange);
                            workbook.SaveAs(saveFileDialog.FileName);
                       }
                    }
                }