[轉貼] 讀取 Excel 你還在用 NPOI 嗎?快來試試 LinqToExcel

2013031409:17
出處:http://demo.tc/Post/639

NPOI是一個牌子老的好工具,之前我們讀取和寫入 Excel 經常會使用到它,但是最近因為案子需求 demo 只需要讀取 Excel 就在網路上找到了這套 LinqToExcel ,進入官網就有一個影片可以看,看完以後心裡只有一個念頭「就是它了」,試用以後發現的確是不錯,馬上就來推薦給各位。

demo廢言廢話不多說,就是我需要讀取傳統的 Excel (2003版以前的也就是副檔名不是 xlsx 的),以往都是使用 NPOI,但是他的繁雜有用過的都知道,因此想找看看網路上有沒有其他的替代方案,因而找到此款 LinqToExcel ,使用方式很簡單,下載檔案回來以後我們只需要將自己的專案參考

  • LinqToExcel.dll
  • Remotion.Data.Linq.dll

就可以正常運作了,基於我很懶的原則,以下範例都使用 LINQPad 來做範例(LINQPad 有在用LINQ不可或缺的好工具

●先出示一下我們的主角 Excel 長啥樣子

注意事項上圖同時確定了的確是舊版本的 Excel


    ●先來撰寫一個最簡單的範例,就是把資料全部倒出來

    1. void Main()
    2. {
    3. var fileName=System.IO.Path.Combine(@"R:\","Names.xls");
    4. var excelFile=new ExcelQueryFactory(fileName);
    5. var excel=excelFile.Worksheet();
    6. foreach (var element in excel)
    7. {
    8. element.Dump();
    9. "".Dump();
    10. }
    11. }

    執行結果

    就這樣相當簡單的就可以把 Excel 讀出來


    demo廢言各位看倌可能會覺得,這樣的資料很難用,的確是不太好使用那就來做個 Class 包它吧!

    ●Class 的欄位名稱與 Excel 必須相同(其實也可以不同)

    1. public class exl
    2. {
    3. public string FirstName { get; set; }
    4. public string LastName { get; set; }
    5. public string Role { get; set; }
    6. public string Age { get; set; }
    7. public string 測試中文 { get; set; }
    8. }

    寫好 Class 以後再來調整一下剛剛的範例

    1. void Main()
    2. {
    3. var fileName=System.IO.Path.Combine(@"R:\","Names.xls");
    4. var excelFile=new ExcelQueryFactory(fileName);
    5.   var excel=excelFile.Worksheet<exl>();
    6. foreach (var element in excel)
    7. {
    8. element.Dump();
    9. "".Dump();
    10. }
    11. }

    執行結果

    只需要利用泛型把剛剛的 Class 丟給它就會自動 mapping 過去,十分的方便。


    ●再來介紹一下搜尋的用法,有很大的機會我們只要抓出符合條件的資料利用 LinqToExcel 也是可以輕鬆達成

    1. void Main()
    2. {
    3. var fileName=System.IO.Path.Combine(@"R:\","Names.xls");
    4. var excelFile=new ExcelQueryFactory(fileName);
    5. var excel=excelFile.Worksheet<exl>()