C#EPPlus不计算公式和(A3:B3)

C#EPPlus不计算公式和(A3:B3),c#,excel,epplus,C#,Excel,Epplus,我刚刚开始与ePlus合作。我有一个数据表,里面有一些数字数据和公式。当我通过EPPlus加载数据表并保存到excel时,当我打开同一excel文件时发现公式未计算。公式以字符串形式存在于excel单元格中SUM(A3:B3) 为了评估公式,我尝试了许多EPPLUS选项,下面列出了这些选项 pack.Workbook.Worksheets["Test"].Calculate(); pack.Workbook.Worksheets["Test"].Cells["A3"].Calculate();

我刚刚开始与ePlus合作。我有一个数据表,里面有一些数字数据和公式。当我通过EPPlus加载数据表并保存到excel时,当我打开同一excel文件时发现公式未计算。公式以字符串形式存在于excel单元格中SUM(A3:B3)

为了评估公式,我尝试了许多EPPLUS选项,下面列出了这些选项

pack.Workbook.Worksheets["Test"].Calculate();
pack.Workbook.Worksheets["Test"].Cells["A3"].Calculate();
pack.Workbook.Worksheets["Test"].Cells["B3"].Calculate();
ws.Calculate();
这里我指的是我的完整示例代码,其中公式不起作用。请看一看,告诉我需要在代码中添加什么来计算公式

private void button1_Click(object sender, EventArgs e)
{
    DataTable dt = GetDataTable();
    string path = @"d:\EPPLUS_DT_Excel.xlsx";
    Stream stream = File.Create(path);

    using (ExcelPackage pack = new ExcelPackage())
    {
        ExcelWorksheet ws = pack.Workbook.Worksheets.Add("Test");
        ws.Cells["A1"].LoadFromDataTable(dt, false);
        //pack.Workbook.Worksheets["Test"].Calculate();
        //pack.Workbook.Worksheets["Test"].Cells["A3"].Calculate();
        //pack.Workbook.Worksheets["Test"].Cells["B3"].Calculate();
        ws.Calculate();
        pack.SaveAs(stream);
        stream.Close();
        MessageBox.Show("Done");
    }
}

public DataTable GetDataTable()
{
    string strSum = "", strColName, strImmediateOneUp = "", strImmediateTwoUp = "";

    int startsum = 0;
    int currow = 0;
    bool firstTimeSum = true;

    int NumRows = 3;
    int NumColumns = 2;

    DataTable dt = new DataTable();

    for (int col = 0; col < NumColumns; col++)
    {
        strColName = GenerateColumnText(col);
        DataColumn datacol = new DataColumn(strColName, typeof(object));
        dt.Columns.Add(datacol);
    }


    for (int row = 0; row < NumRows; row++)
    {
        dt.Rows.Add();

        for (int col = 0; col < NumColumns; col++)
        {
            if (row < 2)
            {
                dt.Rows[row][col] = Convert.ToInt32(new Random().Next(1, NumRows));
            }
            else
            {
                if (firstTimeSum)
                {
                    if (row - currow == 2)
                    {
                        currow = row;
                        startsum = 0;
                        firstTimeSum = false;
                    }
                    else
                    {
                        startsum = 1;
                    }
                }
                else
                {
                    if (row - currow == 3)
                    {
                        currow = row;
                        startsum = 0;
                    }
                }


                if (startsum == 0)
                {
                    strColName = GenerateColumnText(col);
                    strImmediateOneUp = strColName + ((row + 1) - 1).ToString();
                    strImmediateTwoUp = strColName + ((row + 1) - 2).ToString();
                    strSum = string.Format("+SUM({0}:{1})", strImmediateTwoUp, strImmediateOneUp);
                    dt.Rows[row][col] = strSum;
                }
                else
                {
                    dt.Rows[row][col] = Convert.ToInt32(new Random().Next(1, NumRows));
                }
            }

        }

        startsum = 1;
    }
    return dt;
}

private string GenerateColumnText(int num)
{
    string str = "";
    char achar;
    int mod;
    while (true)
    {
        mod = (num % 26) + 65;
        num = (int)(num / 26);
        achar = (char)mod;
        str = achar + str;
        if (num > 0) num--;
        else if (num == 0) break;
    }
    return str;
} 
private void按钮1\u单击(对象发送者,事件参数e)
{
DataTable dt=GetDataTable();
字符串路径=@“d:\EPPLUS\u DT\u Excel.xlsx”;
Stream=File.Create(路径);
使用(ExcelPackage pack=new ExcelPackage())
{
Excel工作表ws=pack.Workbook.Worksheets.Add(“测试”);
ws.Cells[“A1”].LoadFromDataTable(dt,false);
//pack.Workbook.Worksheets[“Test”].Calculate();
//pack.Workbook.Worksheets[“Test”]。Cells[“A3”]。Calculate();
//pack.Workbook.Worksheets[“Test”]。Cells[“B3”]。Calculate();
ws.Calculate();
pack.SaveAs(流);
stream.Close();
MessageBox.Show(“完成”);
}
}
公共数据表GetDataTable()
{
字符串strSum=“”,strColName,strimmediatenoeup=“”,strImmediateTwoUp=“”;
int startsum=0;
int currow=0;
bool firstTimeSum=true;
int NumRows=3;
int NumColumns=2;
DataTable dt=新的DataTable();
for(int col=0;col0)num--;
如果(num==0)中断,则为else;
}
返回str;
} 

将公式添加到单元格时,使用
公式
属性。当您使用
LoadFromDataTable
DataTable
加载范围时,无法知道某些值将被解释为公式


您可以使用
LoadDataTable
填充公式将在其上运行的单元格,但对于公式,您需要设置
Formula
属性。

将公式添加到单元格时,使用
Formula
属性。当您使用
LoadFromDataTable
DataTable
加载范围时,无法知道某些值将被解释为公式


您可以使用
LoadDataTable
填充公式将在其上运行的单元格,但对于公式,您需要设置
Formula
属性。

如果在单元格中看到“SUM(A3:B3)”,则可能缺少“=”符号,或者单元格格式为文本。检查单元格格式。我们不应提供=符号,这是EPPlus的公式惯例。这就是我从sum中删除=符号的原因。请参见基本操作页面。因此,不要使用“+SUM()”,只使用“SUM”。如果在单元格中看到“SUM(A3:B3)”,则可能缺少“=”符号,或者单元格格式为文本。检查单元格格式。我们不应提供=符号,这是EPPlus的公式惯例。这就是我从sum中删除=符号的原因。请参见基本操作页面。所以不要使用“+SUM()”,只使用“SUM”。