繁体   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