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);
arrow
arrow
    文章標籤
    C# LinqToExcel Excel
    全站熱搜

    西夏普 發表在 痞客邦 留言(0) 人氣()