簡體   English   中英

使用C#讀取Excel文件並清理數據

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM