2014年7月16日 星期三

使用LinqToExcel讀取Excel 2003/2007檔案


參考引用來源:使用LinqToExcel讀取Excel 2003/2007檔案
--

1.前言:
讀取Excel檔案的方法很多,LinqToExcel是利用Linq的方式查詢讀取Excel 2003/2007的檔案,為一個MIT license的開放程式碼函式庫。

2.說明:
與眾多操作Excel檔案的函式庫相比,LinqToExcel只能算是輕量級的軟體,用以單純讀取Excel檔案。

有關LinqToExcel的說明可參考:
https://github.com/paulyoder/LinqToExcel#welcome-to-the-linqtoexcel-project

LinqToExcel軟體下載網址:
http://code.google.com/p/linqtoexcel/

本範例使用版本為LinqToExcel_1.7.1,建置平台選擇x86模式。
軟體解壓縮後,將\LinqToExcel_1.7.1的DLL檔複製到自己專案的bin目錄下

加入參考: LinqToExcel.dll, Remotion.Data.Linq.dll
加入命名空間:

using LinqToExcel;
using Remotion;

Excel轉成DataTable:


private DataTable ExcelToDataTable(string filePath, string sheetName)
{
    DataTable dt = new DataTable();
    ExcelQueryFactory excel = new ExcelQueryFactory(filePath);
    IQueryable query = from row in excel.Worksheet(sheetName) select row;

    var columnName = excel.GetColumnNames(sheetName);

    //建立欄位名稱
    foreach (var col in columnName)
    {
        dt.Columns.Add(col.ToString());
    }

    //寫入資料到資料列
    foreach (Row item in query)
    {
        dt.NewRow();
        object[] cell = new object[columnName.Count()];
        int idx = 0;
        foreach (var col in columnName)
        {
            cell[idx] = item[col].Value;
            idx++;
        }
        dt.Rows.Add(cell);
    }          

    return dt;
}
3.應用:

//範例一: 讀取Excel 2003檔案
string filePath = @"D:\tmp\b.xls";
string sheetName = "Sheet1";
DataTable dt = ExcelToDataTable(filePath, sheetName);
//範例二: 讀取Excel 2007檔案
string filePath = @"D:\tmp\c.xlsx";
string sheetName = "Sheet1";
DataTable dt = ExcelToDataTable(filePath, sheetName);

沒有留言:

張貼留言