[英]Reading Excel file using C# and cleaning up the data
这是我第一次这样做,因此欢迎您提供有关最佳做法的任何指导。
我试图从excel文件中获取数据,并且需要处理从我获取的数据中获取的几列。 我需要确保单元格中没有换行符和其他特殊字符,并且某些列不是空白。
经过一番谷歌搜索后,我已经设法获得了这段代码,直到填充适配器为止。
在LINQ部分中,我试图在进一步处理数据之前仅过滤出我需要的列,但这就是我遇到的问题。
我试图为每一行创建一个新订单。 我有一个名为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语句的语法! 还在学习。
这是我进入调试器的var查询部分时显示的错误。 请问我该如何工作?
无效的强制转换异常来自以下行:
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);
}
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.