条件格式 ClosedXML 错误
Conditional Formatting ClosedXML Error
我正在使用 CloseXML 从 excel 的访问中导出一些数据,我正在尝试使用某些日期进行条件格式化,但我收到 NULL EXCEPTION REFERENCE ERROR。这是我的。
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
任何帮助表示赞赏。
错误是您必须先加载文件,然后才能对其进行任何修改,例如条件格式设置,然后以当前格式再次保存文件。
这是我的解决方案。
注:添加了另一个条件。
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);
}
}
}
您原始代码中的问题是您使用 Workbook.Range("C:C")
而不是 Worksheet.Range()
。工作簿本身没有列 "C",因此这是一个无效的范围。工作代码:
wb.Worksheet(1).Range("C:C").AddConditionalFormat().WhenEqualOrGreaterThan(DateTime.Now.ToOADate()).Fill.SetBackgroundColor(XLColor.Red);
与加载和保存文件无关
我正在使用 CloseXML 从 excel 的访问中导出一些数据,我正在尝试使用某些日期进行条件格式化,但我收到 NULL EXCEPTION REFERENCE ERROR。这是我的。
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 任何帮助表示赞赏。
错误是您必须先加载文件,然后才能对其进行任何修改,例如条件格式设置,然后以当前格式再次保存文件。
这是我的解决方案。 注:添加了另一个条件。
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);
}
}
}
您原始代码中的问题是您使用 Workbook.Range("C:C")
而不是 Worksheet.Range()
。工作簿本身没有列 "C",因此这是一个无效的范围。工作代码:
wb.Worksheet(1).Range("C:C").AddConditionalFormat().WhenEqualOrGreaterThan(DateTime.Now.ToOADate()).Fill.SetBackgroundColor(XLColor.Red);
与加载和保存文件无关