【问题标题】:LinqToExcel - Reading a decimal from an *.xlsx fileLinqToExcel - 从 *.xlsx 文件中读取小数
【发布时间】:2018-05-03 14:39:03
【问题描述】:

我已经在这个问题上摆弄了几个小时,而且我有点绕圈子。我错过了一些东西。

我正在尝试使用 Linq to Excel 读取 Excel 工作表。一切都按顺序工作,除了工作表中的小数。我尝试了几种不同的方法,但似乎都不起作用。

我要阅读的列是货币列。我的模型是十进制的。当我在货币格式的 excel 中保留该列时,我从 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. 将值读取为“浮点数”。这没有任何区别。
  4. 我尝试使用文化设置,如将文化设置为 nl-NL 在创建工厂之前在线程中硬编码 完成后将其恢复为原始文化。这没有 区别。

我注意到了:

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

谁能指出我如何配置 excel/更改代码以使其正确读取小数点的正确方向?

【问题讨论】:

  • 当您尝试使用float 时会发生什么?另外,您是否在读数中漏掉了一个逗号或点?
  • 我试过Float。但这也没有用。输出保持不变。奇怪的细节;当我打开 excel 时,它返回正确的值 4587,61。这为我指明了语言问题的方向。当我在生产服务器(荷兰语 Excel + Windows 版本)上运行此代码时,它运行良好!当我在我的开发服务器(英文 Windows + Excel)上运行它时,它不起作用。
  • 有点粗略的猜测,但 excel 中的列类型是什么?一般,数字,字符串?可能是荷兰语和英语的逗号解析问题需要一个点。
  • 尝试了几种不同的设置,一般、数字、货币。甚至尝试过从字符串到十进制的文本和手动解析。解决方案是在我的 decelopment 服务器的语言环境设置中(如下)

标签: c# excel decimal linq-to-excel


【解决方案1】:

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

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-11-17
    • 2023-03-27
    • 1970-01-01
    • 2021-01-15
    • 1970-01-01
    • 1970-01-01
    • 2021-09-27
    相关资源
    最近更新 更多