EPPlus计算扩展方法不计算

时间:2018-03-06 08:24:02

标签: c# epplus

我使用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运算符。为了问题,我只是省略了不必要的代码:)

由于

1 个答案:

答案 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();