2015-07-20 121 views
0

我想转移Datatable来优化并计算总和。为此,我正在使用epplus。这里是我的代码:使用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 + ")"; 
} 

这是我的输出:

enter image description here

我必须进入细胞D2,然后按Enter键,则公式工作:

enter image description here

那么我必须改变公式从一开始就工作吗?谢谢

+0

看起来像它应该工作。当您将鼠标悬停在Excel上时,Excel会为您提供错误消息吗? – Ernie

+0

@Ernie它说“文本参数无法解释”,但在我的代码中,我将列更改为numberfomat。输入都是双倍的,所以应该没有问题 –

回答

1

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

从EPPlus公式计算的文档:

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

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

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; 
      } 
     }