Vb.net 不同环境下的十进制解析差异
晚上, 我的头撞在墙上,有以下问题:Vb.net 不同环境下的十进制解析差异,vb.net,excel,visual-studio,locale,openxml,Vb.net,Excel,Visual Studio,Locale,Openxml,晚上, 我的头撞在墙上,有以下问题: 我正在从Number列的size=16 并且dBase III.dbf文件中的decimal places=2 使用DbfViewer查看这些数字时,显示为:12345.12,其中没有千位分隔符和小数点 分隔符是 我使用decimal.parse(val)解析数据库中单元格中的数字 我用那个号码做事 我使用ClosedXML库将数字粘贴到.xlsxExcel文件单元格中,公式如下:“=R[-1]C*100/”&val,其中val是我从dbaseii数据库文
- 我正在从
列的Number
并且size=16
文件中的dBase III.dbf
decimal places=2
- 使用
查看这些数字时,显示为:DbfViewer
,其中没有千位分隔符和小数点 分隔符是12345.12
- 我使用
解析数据库中单元格中的数字decimal.parse(val)
- 我用那个号码做事
- 我使用
库将数字粘贴到ClosedXML
Excel文件单元格中,公式如下:.xlsx
,其中“=R[-1]C*100/”&val
是我从val
数据库文件中获得的值。这是通过以下语句完成的:dbaseii
Dim公式为String=“=R[-1]C*100/”&project.TotalIncome(i)
cell.FormulaR1C1=公式
- 我使用两种编程环境:
- 带有
和Visual Studio 2013社区的
计算机Windows 8.1
Office 2010
- 带有
和Visual Studio 2013 Ultimate
的Office 2013
计算机Windows 8.1
- 我已确保这两种环境在Windows和Office中具有相同的
语言、日期、时间和数字格式
选项1环境
构建并执行程序时,所有内容都会很好地粘贴到Excel文件中。我导航到包含公式的单元格,无论获得的值是否有小数点,公式都在那里
但是如果我从选项2环境构建并执行程序
,我会得到:
删除的记录:公式来自/xl/worksheets/sheet.xml部分
删除的记录:公式来自/xl/calcChain.xml部分(计算属性)
我尝试在环境2
中添加一个断点,打开局部变量
窗口,编辑那些有小数位的值
,所有操作都按预期进行,而当我使用环境1
时,当值
有小数位时,我没有任何问题
我尝试了以下方法(在环境2
):
此外:
value=Decimal.Parse(行(“VALUECOL”)、新文化信息(“es”))
无济于事
我已在环境2
中打开包含Excel工作表信息的XML文件,并发现:
<x:c r="L101" s="41">
<x:f>L100 * 100/57125,71</x:f>
</x:c>
那么,这是一个VisualStudio区域设置的东西(据我所知,两者都有相同的地方),还是我遗漏了其他东西
编辑:使用以下内容打印当前区域设置:
Console.WriteLine(CultureInfo.CurrentCulture.Name)
在Environment 1
和Environment 2
上产生相同的es
编辑2:
摘自:
为了节省时间,微软选择使用美国英语存储XML
区域设置,而不考虑上面的所有设置。[……]
此外,对于Excel公式,这意味着公式名称为美国英语
公式名称,[…]表示您愿意用英语与我们合作
函数名(加上美式英文分隔符,…)
因此,基本上,这一切都归结为(我相信)将decimal
值预先本地化为excelxml
,并考虑到某些东西
在Environment 2
中,我写入Excel文件的任何其他(非公式)值在XML
中显示为en-US
本地化值(即12345.12
)。它们中的大多数都是通过dataTable
import引入的。但是,由于编写公式需要输入字符串,并且Visual Studio将语言环境设置应用于所述字符串,因此在Excel XML
中,它最终会变成12345,12
,从而导致前面提到的错误
那么,Visual Studio究竟从Environment 1
中吸取了哪些与Environment 2
不同的东西呢?所有可能的UI本地化选项在两台机器中都完全相同 我以前也遇到过类似的问题,发现我的项目引用中有一个不同的dll文件。dll的名称相同,我只是注意到文件大小不同。一旦我在两台开发机器上手动链接到同一个,我就得到了预期的结果
就像我说的,我的问题不同。。。但它也涉及excel文件,我确实在一台开发机器上安装了excel 2010,在另一台机器上安装了2013。我甚至不知道这是否可以作为一个答案,因为我仍然不知道环境1
与环境2
不同的本地化变量在哪里
然而,Visual Studio在使用不同的本地化时,似乎在内部处理非本地化的decimal
变量,但处理本地化的string
变量。即使在调试过程中检查locals
面板,存储在字典
条目中的decimal
数字的值也将在keyValuePair
条目上显示为其本地化版本,并在展开时显示为非本地化的en-US
值:
因此,当将数据表作为一个整体
输出到Excel文件时,它将作为en US
值写入XML。另一方面,当输出公式(也称为string
)时,它会将相关十进制数的本地化版本倒过来
<x:c r="L101" s="41">
<x:f>L100 * 100/57125,71</x:f>
</x:c>
<x:c r="L101" s="41">
<x:f>L100 * 100/57125.71</x:f>
</x:c>
Dim formula As String = "=R[-1]C * 100/" & project.TotalIncome(i).ToString().Replace(",", ".")