晚报,十进制解析差异
我扑我的头靠在墙上有以下问题:
我加载人数从细胞免受
Number
柱size=16
和decimal places = 2
在dBase III .dbf
文件中。这些数字,与
DbfViewer
查看时显示为:12345.12
,那里没有千位分隔符和小数 分隔符.
。我使用
decimal.parse(val)
解析数据库中单元格中的数字。我做这个号码的东西。
我使用
ClosedXML
库数量粘贴到与下式的.xlsx
Excel文件细胞:"=R[-1]C * 100/" & val
其中val
是我从dBaseIII
数据库文件而获得的值。这是通过下面的语句来完成:Dim formula as String = "=R[-1]C * 100/" & project.TotalIncome(i)
cell.FormulaR1C1 = formula
。
我使用两种编程环境:
- 一个
Windows 8.1
机Visual Studio 2013 Community
和Office 2010
。 - A
Windows 8.1
机器有Visual Studio 2013 Ultimate
和Office 2013
。
- 一个
我确定两个环境的格式都是相同的,格式为
Language, Date, Time and Number
,适用于Windows和Office。
当我从Option 1 Environment
构建并执行程序时,所有东西都粘贴在Excel文件中。我导航到包含公式的单元格,并且无论是否获得小数位数value
,公式都在那里。
然而,如果我建立并从Option 2 Environment
执行程序,我得到一个:
Removed Records: Formula from /xl/worksheets/sheet.xml part
Removed Records: Formula from /xl/calcChain.xml part (calculation properties)
我试图Environment 2
加入了断点,打开Locals
窗口和编辑values
有小数位,一切按预期工作,而当我使用Environment 1
时,当value
有小数位时我没有任何问题。
我曾尝试以下(在Environment 2
):
Dim nfi As NumberFormatInfo = New CultureInfo("es-ES", False).NumberFormat
nfi.NumberDecimalSeparator = ","
value = Decimal.Parse(row("VALUECOL"), nfi)
也:
value = Decimal.Parse(row("VALUECOL"), New CultureInfo("es-ES"))
无济于事。
我已打开包含在Environment 2
的Excel工作表信息的XML文件,并发现这一点:
<x:c r="L101" s="41">
<x:f>L100 * 100/57125,71</x:f>
</x:c>
而对于由Environment 1
创建相同的XML文件中的定义具有以下单元格值:
<x:c r="L101" s="41">
<x:f>L100 * 100/57125.71</x:f>
</x:c>
那么,它是一个Visual Studio Locale的东西(它们都有相同的,据我所知),还是我错过了别的东西?
编辑:打印出当前区域设置有:
Console.WriteLine(CultureInfo.CurrentCulture.Name)
产生两个Environment 1
和Environment 2
相同es-ES
。
编辑2: 来自Microsoft Office XML formats. Defective by design.
为了节省他们的时间,微软选择存储使用美国英语语言环境 XML不论上述所有设置。 [...]
此外,对于Excel 公式,它是指式名称是美国英语 公式名称,[...]这意味着你愿意与美国英语 函数名工作(加上美国英语分隔符,...)。
所以基本上这一切归结(我相信)到decimal
值到Excel XML
考虑到东西,某处的预先定位。
在Environment 2
中,我写入Excel文件的任何其他(非公式)值都作为en-US
本地值(即12345.12
)出现在XML
中。他们大部分是通过导入dataTable
引入的。但是,由于编写公式需要输入字符串,并且Visual Studio将区域设置应用于所述字符串,因此Excel XML
中的结果为12345,12
,这会导致前面提到的错误。
所以,究竟是什么在Visual Studio中从Environment 1
是不同从Environment 2
服用?所有可能的UI本地化选项在两台机器上完全相同...
我已经检查既有外部'dll'si使用('ClosedXML.dll' v.0.69.1.0和'DocumentFormat.OpenXml.dll' 2.0版.5022.0),并且都是完全相同的大小。感谢您的意见,但! :) –