使用C#读取Excel文件并清理数据

这是我第一次这样做,所以请任何指导最佳做法是值得欢迎的。

我试图从一个Excel文件中获取数据,并需要使用我得到的数据中的几列。 我需要确保单元格中不存在换行符和其他特殊字符,并且某些列不是空白的。

一些谷歌search后,我设法得到这个代码是正确的,直到填充适配器的位。

在LINQ部分,我试图过滤出我需要的列之前,我进一步处理数据,但这是我坚持的地方。

对于每一行我试图创build一个新的订单。 我有一个叫做Order的类,它只是具有属性,现在我试图填充。

class Program { static void Main(string[] args) { var fileName = @"C:\Users\metesting\Bulkuploader\POS ORDERS2016.xlsx"; var connectionString = @"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + fileName + ";Extended Properties=\"Excel 12.0 Xml;HDR=YES;IMEX=1\";"; var adapter = new OleDbDataAdapter("SELECT * FROM [report$]", connectionString); var ds = new DataSet(); adapter.Fill(ds, "anyNameHere"); var data = ds.Tables["anyNameHere"].AsEnumerable(); var query = data.Where(x => x.Field<string>("Store POS Order Ref") != string.Empty).Select(x => new Order { CPMOrderNo = x.Field<string>("Store POS Order Ref"), StoreName = x.Field<string>("Store Name"), Street = x.Field<string>("Street"), Town = x.Field<string>("Town"), County = x.Field<string>("County"), PostCode = x.Field<string>("Post Code"), POSOrder = x.Field<string>("POS Order: Order Name"), OrderItemCode = x.Field<string>("Order Item: POS Code"), Quantity = x.Field<int>("Quantity"), AuthInStoreBy = x.Field<string>("Authorised In Store By") }); } } 

订单类如下:

  public class Order { public string CPMOrderNo { get; set; } public string StoreName { get; set; } public string Street { get; set; } public string Town { get; set; } public string County { get; set; } public string PostCode { get; set; } public string POSOrder { get; set; } public string OrderItemCode { get; set; } public int Quantity { get; set; } public string AuthInStoreBy { get; set; } } 

我不太了解LINQ语句的语法! 仍在学习。

这是我进入debugging器中的var查询部分时显示的错误。 我怎么能得到这个工作?

在这里输入图像说明

无效的转换exception来自以下行:

 Quantity = x.Field<int>("Quantity"), 

以下更改解决了问题:

 (int)x.Field<double>("Quantity") 

为了得到我的答案,我试图模仿你的Excel文件,如下图所示: ReplicatedExcelFile 。 然后我修改你的代码如下:

 static void Main(string[] args) { var fileName = @"C:/Users/Popper/Desktop/Stackoverflow/StackoverflowQuestion1.xlsx"; var connectionString = @"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + fileName + ";Extended Properties=\"Excel 12.0 Xml;HDR=YES;IMEX=1\";"; var adapter = new OleDbDataAdapter("SELECT * FROM [Sheet1$]", connectionString); var ds = new DataSet(); adapter.Fill(ds, "anyNameHere"); var data = ds.Tables["anyNameHere"].AsEnumerable(); List<Order> orderList = new List<Order>(); Order pickedOrder; foreach (var x in data) { if (x.Field<string>("Store POS Order Ref") != string.Empty && x.Field<string>("Store POS Order Ref") != null) { pickedOrder = new Order(); pickedOrder.CPMOrderNo = x.Field<string>("Store POS Order Ref"); pickedOrder.StoreName = x.Field<string>("Store Name"); pickedOrder.Street = x.Field<string>("Street"); pickedOrder.Town = x.Field<string>("Town"); pickedOrder.County = x.Field<string>("County"); pickedOrder.PostCode = x.Field<string>("Post Code"); pickedOrder.POSOrder = x.Field<string>("POS Order: Order Name"); pickedOrder.OrderItemCode = x.Field<string>("Order Item: POS Code"); pickedOrder.Quantity = (int)x.Field<double>("Quantity"); pickedOrder.AuthInStoreBy = x.Field<string>("Authorised In Store By"); orderList.Add(pickedOrder); } } }