Linq to excel

今天在网上偶尔发现一个开源项目,Linq to excel,感觉挺有意思的,不过这个可能要.net 3.0以上才可以用吧

代码类似以下的

   var excel = newExcelQueryFactory("excelFileName"); 
        var indianaCompanies = from c in excel.Worksheet<Company>() 
                               where c.State == "IN"
                               select c;

  

这样的Linq方式,相信在遍历值和查找方面会相当方便

 

 

 

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

 

 

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

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

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

●先出示一下我們的主角 Excel 長啥樣子 注意事項上圖同時確定了的確是舊版本的 Excel


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

  1. void Main()
  2. {
  3. varfileName=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. }
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 讀出來


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

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

  1. public classexl
  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. }
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 以後再來調整一下剛剛的範例

  1. void Main()
  2. {
  3. varfileName=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. }
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 過去,十分的方便。


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

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

執行結果


●接著就是一個實務也相當常遇到的需求,雖然說 Source Excel 的欄位定義是洋文,但是秀出來的時候必須要是更有意義的字詞(本範例翻譯成中文....),這時候就可以利用 LinqToExcel 的 AddMapping 功能來達到。

●首先先調整 Class

  1. public classexl
  2. {
  3. public string{ get; set; }
  4. public string{ get; set; }
  5. public string 角色 { get; set; }
  6. public string 年齡 { get; set; }
  7. public string 測試中文 { get; set; }
  8. }
public class exl
{
public string 姓 { get; set; }
public string 名 { get; set; }
public string 角色 { get; set; }
public string 年齡 { get; set; }
public string 測試中文 { get; set; }
}

●再來調整 Code

  1. void Main()
  2. {
  3. varfileName=System.IO.Path.Combine(@"R:\","Names.xls");
  4. var excelFile=new ExcelQueryFactory(fileName);
  5. excelFile.AddMapping<exl>(d=>d.姓,"FirstName");
  6. excelFile.AddMapping<exl>(d=>d.名,"LastName");
  7. excelFile.AddMapping<exl>(d=>d.角色,"Role");
  8. excelFile.AddMapping<exl>(d=>d.年齡,"Age");
  9. var excel=excelFile.Worksheet<exl>()
  10. .Where(d=>d.角色=="Administrator");
  11. foreach (var element in excel)
  12. {
  13. element.Dump();
  14. "".Dump();
  15. }
  16. }
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();
    }
}

執行結果


簡單的介紹了幾種常用到的使用方式,官方還有提供更多的範例可以到這裡參考【官方範例】順便一提,這玩意也可以讀取 CSV 檔,如果你對它的原始碼有興趣可以來這裡看看【http://github.com/paulyoder/LinqToExcel

 

原文转载自demoshop:http://demo.tc/Post/639

http://stackoverflow.com/questions/2863423/export-to-excel-in-linq

http://code.google.com/p/linqtoexcel/downloads/list

转载于:https://www.cnblogs.com/zgblog/archive/2012/05/23/2514130.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值