[英]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
在此期间,我尝试了:
string
。 无论我使用哪种单元格格式,这都为我提供了单元格中值的科学表示法。 它读取为“ 4,58761e + 016”,而不是4587,61。 string
处理。 它显示为“ 4,58761e + 016”,而不是“ 4587,61” nl-NL
硬编码,并在完成后将其设置回原始文化一样。 这没什么区别。 我注意到:
nl-NL
)上运行上述测试代码时,它可以正常工作。 它在英语服务器的“ en-US”语言环境中不起作用。 让我认为这与本地化或文化有关吗? 谁能向我指出正确的方向,我该如何配置excel /更改代码以使它读取正确的十进制数?
在尝试了其他几个选项之后,我也转到了nuGet软件包的github项目页面,并在那里发布了一个问题( https://github.com/paulyoder/LinqToExcel/issues/143 )。
解决方案非常简单。 在Windows日期设置中更改我的语言环境。 因为所有文件都是荷兰文,所以这对我来说很有意义。 只有Windows是英语。
这是通过“控制面板”->“区域”完成的
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.