LinqToExcel - 从 *.xlsx 文件中读取小数

LinqToExcel - Reading a decimal from an *.xlsx file

我已经摆弄这个几个小时了,我有点在原地打转。我错过了一些东西。

我正在尝试使用 Linq to Excel 读取 excel sheet。除了 sheet 中的小数点外,一切都按顺序进行。我尝试了几种不同的方法,none 似乎有效。

我要阅读的栏目是货币栏目。我的模型是十进制的。当我在 excel 中保留货币格式的列时,我从 linq 查询中得到 0。

当我将列设置为数字时,我得到的值没有小数点分隔符。

我创建的测试文件有一个名为 DecimalSheet 的 sheet。该列称为 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. 将完整的作品sheet设置为文本格式并处理为 string 如上。它显示为“4,58761e+016”而不是“4587,61”
  3. 读取值为`Float。这没有什么区别。
  4. 我尝试使用文化设置,就像将文化设置为 nl-NL 在创建工厂之前在线程中硬编码并且 完成后将其设置回原始文化。这使得不 差异。

我注意到了:

  1. 当Excel文档保持打开状态时,上面的读数 代码是完美的。我不希望 Excel 因为批处理而保持打开状态 处理 Excel 个文档(在服务器上,无用户交互)。
  2. 当我 运行 上面的测试代码在不同的服务器上时(荷兰语 Windows, 荷兰语 Excel、荷兰语语言环境 nl-NL) 它工作正常。它在 英文服务器 'en-US' 语言环境不起作用。让我觉得 这与本地化或文化有关?

任何人都可以指出正确的方向吗?我如何配置 excel/change 代码以使其读取正确的小数?

在尝试了几个其他选项后,我还访问了此 nuGet 包的 github 项目页面,并在那里发布了一个问题 (https://github.com/paulyoder/LinqToExcel/issues/143)。

解决方法很简单;在 windows 日期设置中更改我的语言环境。这对我来说很有意义,因为所有文件都是荷兰语。只有 windows 是英文的。

这是通过控制面板 -> 区域完成的