公式不是用EPPLUS计算的
Formula not calculating with EPPLUS
我想转一个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,然后公式才有效:
那么我必须改变什么才能使公式从一开始就有效?谢谢
经过长时间搜索后,如果我使用 .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;
}
}
您应该将 "SUMME" 更改为 "SUM",本地化的公式名称由 Excel GUI 处理。基础 xml(与 Excel 产生的结果相同)假定公式名称为英文。
来自 EPPlus 公式计算文档:
- 不要使用本地化的函数名称。仅支持英文名称(如SUM、IF、VLOOKUP等)。
- 不要使用分号作为函数参数之间的分隔符。仅支持逗号。
- 不要在公式中添加前导 = 号。 "=SUM(A1:A2)" 错误,"SUM(A1:A2)" 正确
我想转一个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,然后公式才有效:
那么我必须改变什么才能使公式从一开始就有效?谢谢
经过长时间搜索后,如果我使用 .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;
}
}
您应该将 "SUMME" 更改为 "SUM",本地化的公式名称由 Excel GUI 处理。基础 xml(与 Excel 产生的结果相同)假定公式名称为英文。
来自 EPPlus 公式计算文档:
- 不要使用本地化的函数名称。仅支持英文名称(如SUM、IF、VLOOKUP等)。
- 不要使用分号作为函数参数之间的分隔符。仅支持逗号。
- 不要在公式中添加前导 = 号。 "=SUM(A1:A2)" 错误,"SUM(A1:A2)" 正确