当前位置: 首页 > 知识库问答 >
问题:

全球化将逗号设置为十进制分隔符时,如何在OpenXML Excel单元格中存储十进制/双精度

乌灿
2023-03-14

我试图用C#在OpenXML中创建一个Excel工作表,但最终Excel不得不“修复”工作簿,因为在Excel/xl/worksheets/sheet1中,双精度已使用逗号作为十进制分隔符存储。xml文件

我的Excel和Windows全球化是瑞典语的,每当双精度转换为字符串时,它都会将十进制分隔符设置为逗号。

当我做一个

double d = 355d/113d;
DocumentFormat.OpenXml.Spreadsheet.Cell cell = new Cell();
cell.CellValue = new CellValue(d);
cell.DataType = CellValues.Number;

Excel的/xl/worksheets/sheet1中实际存储的内容。xml是

<x:c s="4" t="n">
    <x:v>3,14159292035398</x:v>
</x:c>

用逗号作为小数点分隔符。这使得我的瑞典Excel强制进行“修复”,并将单元格转换为文本/字符串,而不是数值。我可以在Excel中手动转换为数值,但这在这个应用程序中是不可接受的。

在“修复”并手动将字符串转换为十进制值后查看 /xl/worksheets/sheet1.xml,它们存储为

 <v>3.1415929203539825</v>

用一个点作为小数点分隔符。显而易见的解决方案——我想——是强制用点来存储我的十进制值,而不是像这样的东西

double d = 355d/113d;
DocumentFormat.OpenXml.Spreadsheet.Cell cell = new Cell();
cell.CellValue = new CellValue(d.ToString().Replace(",", ".").Replace(" ", ""));
cell.DataType = CellValues.Number;

还有一些(!)更多的品种来确保单元格。CellValue包含一个点而不是逗号。但是后来我的瑞典Excel疯了,拒绝将值解释为十进制,而是将其改为整数。

所以我被卡住了。有没有人知道如何在DocumentFormat中存储十进制值。OpenXml。电子表格在默认情况下使用逗号作为十进制分隔符的系统中,Excel将正确解释的单元格,而无需修复吗?

共有1个答案

丰智
2023-03-14

没试过这个,但是像这样的怎么样:

var nfi = System.Globalization.CultureInfo.InvariantCulture.NumberFormat;
...
cell.CellValue = new CellValue(d.ToString(nfi));
 类似资料:
  • 问题内容: 我正在尝试将双精度分隔为整数和小数部分 因此,例如,数字24.4应该分为24和4。 使用此方法可为我提供以下值: 我需要十进制的值为4。 如何解决这个问题? 问题答案: 你可以做一个String 。然后Integer 取回两个整数分量。

  • 问题内容: 我需要用点替换逗号,然后我需要将值设为数字。所以我这样写: 但是然后我想转换该值,然后出现错误: 问题答案: 该函数使用会话的NLS_NUMERIC_CHARACTERS设置来决定如何解释逗号和句点。如果您知道字符串始终以逗号作为小数点分隔符,则可以使用可选的第三个参数将其覆盖为调用的一部分;尽管这确实意味着您必须指定格式模型: 您不需要单独的步骤。 您也可以使用更改会话的设置,但可能

  • 本文向大家介绍如何将十六进制转换为十进制?,包括了如何将十六进制转换为十进制?的使用技巧和注意事项,需要的朋友参考一下 而十六进制数是具有值是16的数字系统中的一个并且它具有唯一的16个码元:0,1,2,3,4,5,6,7,8,9和A,B,C,d,E ,其中A,B,C,D,E和F分别是十进制值10、11、12、13、14和15的单位表示。而十进制系统是最熟悉的号码系统向公众开放。它是10的基数,只

  • 本文向大家介绍如何将十进制转换为十六进制?,包括了如何将十进制转换为十六进制?的使用技巧和注意事项,需要的朋友参考一下 十进制是公众最熟悉的数字系统。它是基数10,只有10个符号-0、1、2、3、4、5、6、7、8和9。而十六进制是计算机或数字系统中最常见的数字系统颜色表示。它是基数16,只有16个符号:0、1、2、3、4、5、6、7、8、9和A,B,C,D,E,F。这些A,B,C,D ,E,F分

  • 问题内容: 如何在JavaScript中将十进制值转换为等效的十六进制值? 问题答案: 使用以下命令将数字转换为十六进制字符串: 并通过以下步骤逆向处理:

  • 问题内容: 我有一些Perl代码,其中hex()函数将十六进制数据转换为十进制。如何在Python上执行此操作? 问题答案: 如果用“十六进制数据”表示字符串形式 您可以使用 将其转换为整数并 将其转换为十进制字符串。