使用 C# 在 Excel 中设置货币格式

gos*_*kan 5 c# excel

我有一个 C# 模型

    public class Model
    {
        public int CurrencyId{ get; set; }
        public decimal? ValueMoney{ get; set; }
    }
Run Code Online (Sandbox Code Playgroud)

并从数据库我收到 List<Model>

我想在 Excel 工作表中以货币格式编写 ValueMoneys,根据 CurrencyId,它必须是美元 $ 或巴西雷亚尔 R$。

我正在使用 Microsoft.Office.Interop.Excel;

我的代码如下所示:

var data = GetValues().ToList();
Application xlApp = new Application();
Workbook xlWorkBook = null;
Worksheet xlWorkSheet = xlWorkBook.Worksheets[1];

for (int i = 1; i < data.count; i++){
     xlWorkSheet.Cells[i, 1] = data[i].ValueMoney!= null ? data[i].CurrencyId == 2 ? data[i].ValueMoney.Value.ToString("C", new CultureInfo("pt-BR")) : data[i].ValueMoney.Value.ToString("C", new CultureInfo("en-US")) : "";       
    ((Range)xlWorkSheet.Cells[i, 1]).Style = "Currency" ;
}
Run Code Online (Sandbox Code Playgroud)

问题是在 Excel 中,它向我显示了它是一个字符串并要求更改为数字格式的警告。

我试图使用

xlWorkSheet.Cells[i, 1] = data[i].ValueMoney
((Range)xlWorkSheet.Cells[i, 1]).NumberFormat = "$ #,##0.00" 
Run Code Online (Sandbox Code Playgroud)

但自从我在巴西以来,它总是显示 R$。提前感谢您的帮助。

[更新] 它有效

xlWorkSheet.Cells[i, 1] = data[i].ValueMoney;
((Range)xlWorkSheet.Cells[i, 1]).NumberFormat = data[i].CurrencyId == 2 ? "$ #,##0.00" : "[$$-409] #,##0.00";
Run Code Online (Sandbox Code Playgroud)

Sla*_*lai 5

美元 $ $ 的区域设置代码是[$$-en-US],巴西雷亚尔 R$ 的区域设置代码是[$R$-pt-BR]。例如 :

.NumberFormat = "[$$-en-US] #,##0.00";
Run Code Online (Sandbox Code Playgroud)

通过在“Excel 格式单元格”对话框的“货币”部分中设置符号,然后在同一对话框的“自定义”部分中检查相应的数字格式,可以找到区域设置代码。