来自CSV文件的Linq-To-Excel,缺少小数点分隔符

时间:2015-11-26 20:47:46

标签: c# csv linq-to-excel

我使用Linq-To-Excel软件包读取CSV文件。我创建了一个用于保存结果的类:

public class ReconciliationLineLinqToExcel
{
    public string OperatingUnit { get; set; }
    public Int64 CustomerTenantId { get; set; }
    public string CustomerName { get; set; }
    public string SyndicationPartnerSubscriptionNumber { get; set; }
    public string DurableOfferId { get; set; }
    public DateTime SubscriptionStartDate { get; set; }
    public DateTime SubscriptionEndDate { get; set; }
    public DateTime ChargeStartDate { get; set; }
    public DateTime ChargeEndDate { get; set; }
    public string ChargeType { get; set; }
    public decimal UnitPrice { get; set; }
    public int Quantity { get; set; }
    public decimal Amount { get; set; }
    public decimal TotalOtherDiscount { get; set; }
    public decimal Subtotal { get; set; }
    public decimal Tax { get; set; }
    public decimal TotalForCustomer { get; set; }
    public string Currency { get; set; }
}

每个属性都是CSV文件中的一列。

CSV的标题行:

OperatingUnit,CustomerTenantId,CustomerName,MpnId,OrderId,SubscriptionId,SyndicationPartnerSubscriptionNumber,OfferId,DurableOfferId,OfferName,SubscriptionStartDate,SubscriptionEndDate,ChargeStartDate,ChargeEndDate,ChargeType,UnitPrice,Quantity,Amount,TotalOtherDiscount,Subtotal,Tax,TotalForCustomer,Currency

这是CSV文件中的一个示例行作为输入:(我已审查了一些数据)

e588f1c2-69f1-4b78-3c4d-9b844d03c18e,"1338338173","COMPANY NAME",1382187,"567172081122654669","p3rITwAAAABBAAIA","68752F49-D9CA-4870-8955-3EEB26E37068","B0D93AE5-400E-4CBC-A465-D12B9FFA75AB","031C9E47-4845-4248-838E-778FB1D2CC05","OFFICE 365 BUSINESS PREMIUM",11/04/2015 00:00:00,11/23/2016 00:00:00,11/23/2015 00:00:00,12/22/2015 00:00:00,"CYCLE FEE",8.44,8,67.52,0,67.52,0,67.52,"EUR"

使用此代码我打开CSV文件并阅读以下行:

var csv = new ExcelQueryFactory(filename);
var data = csv.Worksheet<ReconciliationLineLinqToExcel>(0);

当我迭代数据变量并查找此行时,所有小数值都缺少小数分隔符。例如,财产&#39;金额&#39;值为6752,而不是67.52

这适用于每一行中的所有十进制值。在将其解析为十进制时,我认为它可能与某些文化问题有关,所以我尝试将属性的类型更改为字符串。但后来我得到了#34; 6752&#34;的值,所以没有运气。

有没有人知道我在这里失踪的是什么,还是这个错误?

2 个答案:

答案 0 :(得分:0)

文档中的第一件事是OperatingUnit。您已将其定义为字符串,但您的CSV周围没有引号。第二件事是Int64,正如你所定义的那样,但你有引号。

确保您的数据类型实际匹配,否则您肯定会得到意想不到的结果。

答案 1 :(得分:-1)

如果您不熟悉Linq-To-Excel,可以尝试LINQ to CSV。这很容易设置(5-10分钟),也许它可以解决你的问题。它足以处理某些特殊字符,如逗号,引号和小数。

以下是我用一些小数生成的测试电子表格的屏幕截图。

LINQ to CSV with decimals

我从另一个CSV文件中一直读取这些小数;它们不是硬编码的。