晚報,十進制解析差異
我撲我的頭靠在牆上有以下問題:
我加載人數從細胞免受
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),並且都是完全相同的大小。感謝您的意見,但! :) –