NPOI是一個牌子老的好工具,之前我們讀取和寫入 Excel 經常會使用到它,但是最近因為案子需求 demo 只需要讀取 Excel 就在網路上找到了這套 LinqToExcel ,進入官網就有一個影片可以看,看完以後心裡只有一個念頭「就是它了」,試用以後發現的確是不錯,馬上就來推薦給各位。
廢話不多說,就是我需要讀取傳統的 Excel (2003版以前的也就是副檔名不是 xlsx 的),以往都是使用 NPOI,但是他的繁雜有用過的都知道,因此想找看看網路上有沒有其他的替代方案,因而找到此款 LinqToExcel ,使用方式很簡單,下載檔案回來以後我們只需要將自己的專案參考
- LinqToExcel.dll
- Remotion.Data.Linq.dll
就可以正常運作了,基於我很懶的原則,以下範例都使用 LINQPad 來做範例(LINQPad 有在用LINQ不可或缺的好工具)

- void Main()
- {
- var fileName=System.IO.Path.Combine(@"R:\","Names.xls");
- var excelFile=new ExcelQueryFactory(fileName);
- var excel=excelFile.Worksheet();
- foreach (var element in excel)
- {
- element.Dump();
- "".Dump();
- }
- }
執行結果

就這樣相當簡單的就可以把 Excel 讀出來
- public class exl
- {
- public string FirstName { get; set; }
- public string LastName { get; set; }
- public string Role { get; set; }
- public string Age { get; set; }
- public string 測試中文 { get; set; }
- }
寫好 Class 以後再來調整一下剛剛的範例
- void Main()
- {
- var fileName=System.IO.Path.Combine(@"R:\","Names.xls");
- var excelFile=new ExcelQueryFactory(fileName);
- var excel=excelFile.Worksheet<exl>();
- foreach (var element in excel)
- {
- element.Dump();
- "".Dump();
- }
- }
執行結果


只需要利用泛型把剛剛的 Class 丟給它就會自動 mapping 過去,十分的方便。
- void Main()
- {
- var fileName=System.IO.Path.Combine(@"R:\","Names.xls");
- var excelFile=new ExcelQueryFactory(fileName);
- var excel=excelFile.Worksheet<exl>()
- .Where(d=>d.Role=="User");
- foreach (var element in excel)
- {
- element.Dump();
- "".Dump();
- }
- }
執行結果


- public class exl
- {
- public string 姓 { get; set; }
- public string 名 { get; set; }
- public string 角色 { get; set; }
- public string 年齡 { get; set; }
- public string 測試中文 { get; set; }
- }
- void Main()
- {
- var fileName=System.IO.Path.Combine(@"R:\","Names.xls");
- var excelFile=new ExcelQueryFactory(fileName);
- excelFile.AddMapping<exl>(d=>d.姓,"FirstName");
- excelFile.AddMapping<exl>(d=>d.名,"LastName");
- excelFile.AddMapping<exl>(d=>d.角色,"Role");
- excelFile.AddMapping<exl>(d=>d.年齡,"Age");
- var excel=excelFile.Worksheet<exl>()
- .Where(d=>d.角色=="Administrator");
- foreach (var element in excel)
- {
- element.Dump();
- "".Dump();
- }
- }
執行結果


沒有留言:
張貼留言