【问题标题】:Formula not calculating with EPPLUS没有用 EPPLUS 计算的公式
【发布时间】:2015-07-20 09:57:51
【问题描述】:

我想将Datatable转移到excel并计算一个总和。为此,我正在使用 epplus。这是我的代码:

Sheet.Cells["A1"].LoadFromDataTable(dsExcel.Tables[0], true, TableStyles.Medium9);
Sheet.Cells[Sheet.Dimension.Address].AutoFitColumns();
Sheet.View.FreezePanes(3, 3);

int totalCols = Sheet.Dimension.End.Column;
int letztezeile = Sheet.Dimension.End.Row;
var range = Sheet.Cells[1, 1, 1, totalCols];

for (int i = 3; i < totalCols; i++)
{
   if (range[1, i].Value.ToString().Contains("Durchfluss")) Sheet.Column(i).Style.Numberformat.Format = "#,##0.00";
 }

 Sheet.InsertRow(2, 1);
 Sheet.Cells["A2"].Value = "Summe";
 for (int i = 4; i <= totalCols; i++)
 {
     Sheet.Cells[2, i, 2, i].Formula = "SUMME(" + range[3, i].Address + ":" + range[letztezeile + 1, i].Address + ")";
 }

这是我的输出:

我必须输入单元格 D2 并按 Enter,然后公式才起作用:

那么我必须改变什么才能使公式从一开始就起作用?谢谢

【问题讨论】:

  • 看起来应该可以了。当您将鼠标悬停在 Excel 上时,它会向您提供错误消息吗?
  • @Ernie 它说“无法解释文本参数”,但在我的代码中,我将列更改为 numberfomat。输入都是double所以应该没有问题

标签: c# excel epplus


【解决方案1】:

您应该将“SUMME”更改为“SUM”,本地化公式名称由 Excel GUI 处理。底层 xml(与 Excel 生成的相同)假定公式名称为英文。

来自 EPPlus 公式计算文档:

  • 不要使用本地化的函数名。仅支持英文名称(如 SUM、IF、VLOOKUP 等)。
  • 不要使用分号作为函数参数之间的分隔符。仅支持逗号。
  • 不要在公式中添加前导 = 符号。 “=SUM(A1:A2)”错误,“SUM(A1:A2)”正确

【讨论】:

    【解决方案2】:

    经过长时间的搜索,如果我使用.LoadFromDataTable 并将每个值都写为string,似乎epplus 会忽略数据类型。所以我必须解析每个值以加倍并将其写回单元格。之后一切正常。

    double ZahlAlsText;
            for (int i = 2; i < totalCols; i++) 'columns
            {
                for (int y = 2; y <= letztezeile + 1; y++) 'rows
                {
                    ZahlAlsText = double.Parse(range[y, i].Value.ToString());
                    range[y, i].Style.Numberformat.Format = "#,##0.00";
                    range[y, i].Value = ZahlAlsText;
                }
            }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多