簡體   English   中英

LinqToExcel-從* .xlsx文件讀取小數

[英]LinqToExcel - Reading a decimal from an *.xlsx file

我已經在這個問題上擺弄了兩個小時,我有點圈了。 我想念一些東西。

我正在嘗試使用Linq to Excel閱讀Excel工作表。 除工作表中的小數點外,所有內容均按順序工作。 我嘗試了幾種不同的方法,但似乎都沒有用。

我嘗試讀取的列是貨幣列。 我的模型是十進制的。 當我將列保留為excel的Currency格式時,從linq查詢中得到0。

當我將列設置為數字時,我得到的值沒有小數點分隔符。

我創建的測試文件有一個名為DecimalSheet的工作表。 該列稱為DecimalTest,其中包含一個數字。 4587,61

我有一個這樣的測試模型;

public class DecimalModel
{
    [ExcelColumn("DecimalTest")]
    public decimal DecimalTest { get; set; }
}

查詢文件是這樣實現的:

var testFile = new ExcelQueryFactory(fileLocation)
{
    DatabaseEngine = LinqToExcel.Domain.DatabaseEngine.Ace,
    TrimSpaces = LinqToExcel.Query.TrimSpacesType.Both,
    UsePersistentConnection = false, 
    ReadOnly = true
};

var decimalTestModel = from tb in testFile.Worksheet<DecimalModel>("DecimalSheet")
                       select tb;

var lines = decimalTestModel.ToList();

讀數是這樣的:45876100000000000M

編輯1

在此期間,我嘗試了:

  1. 將值讀取為string 無論我使用哪種單元格格式,這都為我提供了單元格中值的科學表示法。 它讀取為“ 4,58761e + 016”,而不是4587,61。
  2. 將完整的工作表設置為文本格式,並按上述方式將其作為string處理。 它顯示為“ 4,58761e + 016”,而不是“ 4587,61”
  3. 將值讀取為“ Float”。 這沒什么區別。
  4. 我嘗試使用文化設置,就像在創建工廠之前將文化設置為線程中的nl-NL硬編碼,並在完成后將其設置回原始文化一樣。 這沒什么區別。

我注意到:

  1. 當Excel文檔保持打開狀態時,帶有上述代碼的讀數非常完美。 由於Excel文檔的批處理(在服務器上,沒有用戶交互),我不希望Excel保持打開狀態。
  2. 當我在其他服務器(荷蘭語Windows,Dutch Excel,Dutch Locale nl-NL )上運行上述測試代碼時,它可以正常工作。 它在英語服務器的“ en-US”語言環境中不起作用。 讓我認為這與本地化或文化有關嗎?

誰能向我指出正確的方向,我該如何配置excel /更改代碼以使它讀取正確的十進制數?

在嘗試了其他幾個選項之后,我也轉到了nuGet軟件包的github項目頁面,並在那里發布了一個問題( https://github.com/paulyoder/LinqToExcel/issues/143 )。

解決方案非常簡單。 在Windows日期設置中更改我的語言環境。 因為所有文件都是荷蘭文,所以這對我來說很有意義。 只有Windows是英語。

這是通過“控制面板”->“區域”完成的

將格式設置為荷蘭語

將系統區域設置設置為荷蘭語

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM