Excel 互操作货币格式

Posted

技术标签:

【中文标题】Excel 互操作货币格式【英文标题】:Excel Interop currency format 【发布时间】:2010-10-29 06:52:35 【问题描述】:

我正在尝试将 excel 中的单元格格式化为货币格式。于是我进入excel,记录了我将普通单元格转换为货币格式的宏,看一下vb脚本,看到它输出如下:

NumberFormat = "$#,##0.00"

所以我采用该格式并将其粘贴到我的代码中,它的工作原理是在我的 Excel 表中的值之前获取货币字符。但是,单元格的格式仍然是数字,excel 在单元格的左下角放置一个绿色小三角形,通知我格式不正确(它是,因为它应该是货币,但它设置为数字) c# 中是否有任何方法可以将单元格实际设置为“货币”格式?

谢谢

【问题讨论】:

【参考方案1】:

范围对象有一个“样式”属性... intelisense 元数据说它只是“返回一个您可以使用的对象”,但您也可以只使用该属性设置样式。要获得内置的“货币”样式,请使用(例如)工作簿对象的“样式”属性。

例子:

using Excel = Microsoft.Office.Interop.Excel;

...

var excel = new Excel.Application();
var wb = excel.Workbooks.Add();
var sheet = (Excel.Worksheet)wb.Sheets[1];
((Excel.Range)sheet.Cells[3, 4]).Style = wb.Styles["Currency"];

实际上,您可以将其设置为字符串“Currency”,这可能是 Charles 所建议的。

((Excel.Range)sheet.Cells[3, 4]).Style = "Currency";

【讨论】:

【参考方案2】:

好的,我尝试了很多代码,我发现这在任何语言/区域设置上都比其他代码效果更好。

numberFormat = @"_-[$$-409]* #,##0.00_ ;_-[$$-409]* -#,##0.00 ;_-[$$-409]* ""-""??_ ;_-@_ ";

【讨论】:

【参考方案3】:

不确定我是否理解您的问题:在 Excel 中,包括货币、整数和日期/时间在内的所有数值都以浮点双精度形式保存。值的格式仅控制它在渲染(可见)层中的呈现方式。 绿色三角形测试不包括格式测试。问题是您创建的是文本值而不是数字值吗?

【讨论】:

没有我将单元格设置为数字的值。为了更好地理解我的问题,如果您右键单击 excel 中的一个单元格,然后单击格式单元格,有一个不同格式的列表,其中包括“数字”和“货币”等类型,有没有办法让我设置一个使用 excel 互操作将单元格格式化为“货币”,我尝试使用 NumberFormat 来做到这一点,但它似乎没有用 您可以尝试将样式设置为 Currency。 但我认为数字格式不是问题,因为除了一个检查之外,没有绿色三角形检查格式对于存储为文本的数字。也许你应该发布你的代码。 顺便说一句,如果将数字输入为字符串/文本或格式化为文本,则随后将其格式化为货币不会将其转换回数字。

以上是关于Excel 互操作货币格式的主要内容,如果未能解决你的问题,请参考以下文章

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

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

使用互操作将 datagridview 导出到 excel

C# -Excel 互操作性

Excel 互操作 - 效率和性能

使用 Visual Basic 和互操作搜索 Excel 文档列