我使用EPPlus库将数据导出到Excel,而不是DataTable中的结果。
我无法提供我想要autosum的列的确切单元格地址,因为DataSet中的行数总是会因动态构建而变化,但是我想要应用autosum的列将始终处于相同的位置。
我试着这样:
static async Task EPPlusExport(DataTable dataTable, FileInfo newFile)
{
try
{
using (ExcelPackage package = new ExcelPackage(newFile))
{
ExcelWorksheet workSheet = package.Workbook.Worksheets.Add("Raw Data");
workSheet.Cells["A1"].LoadFromDataTable(dataTable, true);
workSheet.Cells[1, 1, 1, dataTable.Columns.Count].Style.Fill.PatternType = OfficeOpenXml.Style.ExcelFillStyle.Solid;
workSheet.Cells[1, 1, 1, dataTable.Columns.Count].Style.Fill.BackgroundColor.SetColor(Color.LightSlateGray);
workSheet.Cells[1, 1, 1, dataTable.Columns.Count].AutoFilter = true;
workSheet.View.FreezePanes(2, 1);
workSheet.Cells[(dataTable.Rows.Count + 1), 22].Calculate();
for (int i = 1; i < dataTable.Columns.Count; i++)
{
workSheet.Column(i).AutoFit();
}
package.Save();
}
}
catch (Exception ex)
{
Console.WriteLine(ex.Message);
Console.ReadLine();
}
}
我认为这将确定我希望将autosum应用于哪个单元格:
workSheet.Cells[(dataTable.Rows.Count + 1), 22].Calculate();
我想在包含来自我的DataTable的数据的最后一行之后的行上使用autosum,我想要对第22列求和。我不能对单元格地址进行硬编码。猜猜我在某个地方出错了?
我在这个方法中使用了await运算符。为了问题,我只是省略了不必要的代码:)
由于
答案 0 :(得分:0)
Calculate函数将尝试计算您引用的单元格中的任何Excel公式。在您的代码中,单元格实际上包含公式并不明显。如果不是,则需要在调用Calculate之前添加SUM公式。
workSheet.Cells[(dataTable.Rows.Count + 1), 22].Formula = "SUM(V1:V" + datatable.Rows.Count + ")";
workSheet.Cells[(dataTable.Rows.Count + 1), 22].Calculate();