如何在 C# Excel 互操作中格式化公式结果?

Posted

技术标签:

【中文标题】如何在 C# Excel 互操作中格式化公式结果?【英文标题】:How can I format a formulaic result in C# Excel Interop? 【发布时间】:2015-12-01 23:59:34 【问题描述】:

我有这段代码对给定范围内的值求和(第 O 行第 10 列到第 O 列最后一个重要行):

注意:这是字母“O”而不是数字“零”。

var totalTotalPackageCountCell = 
              (Range)_xlSheetDelPerf.Cells[curDelPerfRow + 2, TOTAL_PACKAGE_COUNT_COLUMN];

totalTotalPackageCountCell.Formula = string.Format("=SUM(O10:O0)", curDelPerfRow);

除了一件事之外,它的工作原理非常漂亮:值显示时不带逗号,例如“20192”(我希望它是“20,192”)。

我试过这个:

totalTotalPackageCountCell.Formula = 
              string.Format("=SUM(O10:O0)", curDelPerfRow)
              .ToString("N0", CultureInfo.CurrentCulture);

....ToString("N0", CultureInfo.CurrentCulture) 是我成功地将逗号添加到其他值的方法。

但是,在这种(公式值)情况下,它甚至无法编译 - 我得到:

方法 'ToString' 没有重载需要 2 个参数

我怎样才能得到我的公式并格式化它呢?

【问题讨论】:

尝试转换为整数,然后在其上使用 ToString,这样您有更多选择。 刚刚阅读:您正在将此值设置为 公式。您正在尝试格式化 formula 表达式,而不是结果。我想excel库会有一个像“格式”之类的属性,你必须使用一个特定于excel的表达式 为了清楚起见,您正在尝试格式化此字符串:=SUM(O10:O20),而不是 result(excel 将计算它,而不是在您的应用程序中)。所以,即使它确实编译了,它也不会像你期望的那样。 【参考方案1】:

你可以试试这个。在赋值之前尝试指定单元格的 NumberFormat。

totalTotalPackageCountCell.NumberFormat = "#,##0";
totalTotalPackageCountCell.Formula = string.Format("=SUM(O10:O0)", curDelPerfRow);

【讨论】:

以上是关于如何在 C# Excel 互操作中格式化公式结果?的主要内容,如果未能解决你的问题,请参考以下文章

excel 互操作:NumberFormat #,##0.000 不显示预期结果

如何从 C# 应用程序中正确清理 Excel 互操作对象?

使用 CSC 编译 C# 代码 - excel 互操作

C# -Excel 互操作性

C#互操作:将新工作表添加到现有文件后,excel进程未退出[重复]

Excel 互操作货币格式