我們讀取和寫入Excel 經(jīng)常使用NPOI工具,如果我們的需求只是需要讀取Excel,可以考慮使用LinqToExcel這個(gè)組件。這個(gè)組件用起來(lái)簡(jiǎn)單,實(shí)用,操作方便,而且結(jié)合了Linq的查詢特性,excel版本不僅支持2003,而且連wps表格都支持(后綴名為.et),csv文件更不在話下了.
在使用之前:
1.添加引用,通過(guò)Nuget 來(lái)添加是最方便的了,這里要注意的32/64問(wèn)題,具體參看文章 如何解決 LinqToExcel 發(fā)生「無(wú)法載入檔案或組件」問(wèn)題
LinqToExcel.dll
Remotion.Data.Linq.dll
2.添加命名空間
using LinqToExcel;
//取得數(shù)據(jù),只需要一行代碼
var execelfile = new ExcelQueryFactory(sample.xls);
如何取到相應(yīng)的表呢?
//緊接樓上
var tsheet = excelfile.Worksheet(0);
此時(shí)得到是沒(méi)有進(jìn)行相應(yīng)映射的(row)行列集合.
一個(gè)簡(jiǎn)單的查詢:
var excelfile = new ExcelQueryFactory("1.xls");
var tsheet = excelfile.Worksheet(0);<br> //查詢30歲以上的人的名字
var query = from p in tsheet
where p["Age"].Cast<int>() > 30
select p;
foreach (var item in query)
{
Console.WriteLine("Name is {0}",item[0].Value.ToString());
}
Console.Read();
那如何轉(zhuǎn)成相應(yīng)的實(shí)體集合呢? LinqToExcel還具有Mapping 功能,如果類的屬性名和Excel里的表頭名字如果是英文,(區(qū)分大小寫)必須與屬性名保持一致,支持中文屬性名和表頭。接著就是一個(gè)常遇到的需求,雖然說(shuō) Excel 的字段定義是英文,但是讀出來(lái)的時(shí)候必須要是更有意義的字詞(本范例翻譯成中文....),這時(shí)候就可以利用 LinqToExcel 的 AddMapping 功能來(lái)達(dá)到。