Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# LinqToExcel-从*.xlsx文件读取十进制数_C#_Excel_Decimal_Linq To Excel - Fatal编程技术网

C# LinqToExcel-从*.xlsx文件读取十进制数

C# LinqToExcel-从*.xlsx文件读取十进制数,c#,excel,decimal,linq-to-excel,C#,Excel,Decimal,Linq To Excel,我已经摆弄了好几个小时了,我有点绕圈子了。我错过了一些东西 我正在用Linq to excel阅读excel表格。除了表中的小数外,一切都按顺序进行。我尝试过几种不同的方法,但似乎都不管用 我想读的专栏是货币专栏。我的型号是十进制的。当我在excel中保留货币格式的列时,我从linq查询中得到0 当我将列设置为数字时,得到的值没有小数点分隔符 我创建的testfile有一个名为DecimalSheet的表。该列称为DecimalTest,包含一个数字;4587,61 我有一个这样的测试模型 pu

我已经摆弄了好几个小时了,我有点绕圈子了。我错过了一些东西

我正在用Linq to excel阅读excel表格。除了表中的小数外,一切都按顺序进行。我尝试过几种不同的方法,但似乎都不管用

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

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

我创建的testfile有一个名为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();
var testFile=new ExcelQueryFactory(文件位置)
{
DatabaseEngine=LinqToExcel.Domain.DatabaseEngine.Ace,
TrimSpaces=LinqToExcel.Query.TrimSpacesType.Both,
UsePersistentConnection=false,
只读=真
};
var decimalTestModel=来自testFile.Worksheet(“DecimalSheet”)中的tb
选择结核病;
var lines=decimalTestModel.ToList();
读数如下:45876100000000000M

编辑1

在此期间,我尝试:

  • 将值读取为
    字符串
    。这给了我一个机会 单元格中值的科学表示法,无论是哪种类型的 我使用的单元格格式。其读数为“458761E+016”,而不是4587,61
  • 将整个工作表设置为文本格式并按以下方式处理
    字符串
    如上所述。其读数为“458761E+016”,而不是“4587,61”
  • 将值读取为“Float”。这没什么区别
  • 我尝试使用文化设置,就像将文化设置为
    nl-nl
    在创建工厂和 在我完成后将其恢复到原始文化。这没有造成任何后果 差别
  • 我注意到:

  • 当Excel文档保持打开状态时,将使用上面的 代码是完美的。我不希望Excel因为批处理而保持打开状态 处理Excel文档(在服务器上,无需用户交互)
  • 当我在不同的服务器(荷兰Windows、, 荷兰Excel,荷兰语言环境
    nl-nl
    )工作正常。在电视上 英语服务器“en US”区域设置表明它不工作。让我想 这和本地化或文化有关吗

  • 有人能告诉我如何配置excel/更改代码以使其正确读取十进制数吗?

    在尝试了两个其他选项后,我也转到了这个nuGet软件包的github项目页面,并在那里发布了一个问题()

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

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


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