zoukankan      html  css  js  c++  java
  • 使用LinqToExcel和EPPlus操作excel

    1、使用LinqToExcel

     LinqToExcel是一个.net framework平台下开源项目,它主要实现了LINQ的语法查询Excel电子表格。类型之前的LINQToXXX如果你是LINQ语法糖爱好者那最适合您。

    你在VS中可以从NuGet中搜索它,如下图: 
    linqtoexcel1

    或从控制台使用以下命令:

    PM> Install-Package LinqToExcel

    在使用之前需要添加命名空间  using LinqToExcel;

    //取得数据,只需要一行代码
    var execelfile = new ExcelQueryFactory(excelfilename.xls);

    如何取到相应的表呢?

    //紧接楼上
    var tsheet = excelfile.Worksheet(0);

    此时得到是没有进行相应映射的(row)行列集合.

    一个简单的查询:

    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();

    查询结果:

     那如何转成相应的实体集合呢?

    class Program
       {
           static void Main(string[] args)
           {
               var excelfile = new ExcelQueryFactory("1.xls");
               //用另一种方法取得实体数据集
               var tsheet = excelfile.Worksheet<Person>(0);
               var query = from p in tsheet
                           where p.Age > 30
                           select p;
               foreach (var item in query)
               {
                   Console.WriteLine("Name is {0}", item.Name);
               }
               Console.Read();
           }
       }
     
       public class Person
       {
           public string Name { get; set; }
           public int Age { get; set; }
           public string Address { get; set; }
           public Person() { }
           public Person(string _name, int _age, string _address)
           {
               this.Name = _name;
               this.Age = _age;
               this.Address = _address;
           }
       }

    结果:

    这里需要注意的一点:

    表头名字如果是英文,(区分大小写)必须与属性名保持一致,要不然会报错的----支持中文属性名和表头

    如果将得到的数据集绑定到控件的时候,请最后转List集合:

    Winform示例:

    后台代码:

    前台效果:

    总结:感觉这个库文件用起来简单,实用,操作方便,而且结合了Linq的查询特性,excel版本不仅支持03,而且连wps表格都支持(后缀名为.et),csv文件更不在话下了。

    2、使用EPPlus

    提到通过纯.Net读写Excel,一般首先想到的自然是大名鼎鼎的NPOI,就连微软官方的MSDN都有专门的一篇文章来介绍它的用法。今天在一个项目中使用到了导出报表为Excel的功能,便特地的试用了一下,感觉虽然它的功能够强大,但谈不上好用。可能是由于其起源与Java的POI的缘故,大部分的API还透浓浓着Java的味道。 例如,要在一个单元格中写入数据时,必须先CreateRow(),再CreateCell()才能写入,不能使用类似Cells[rowIndex, colIndex]=value之类的语句一步到位。

    于是,便在网上继续搜了一下,在文章《讀取 Excel 你還在用 NPOI 嗎?快來試試 LinqToExcel》中找到了另一个库:LinqToExcel。这个库可以通过一个LINQ查询快速而友好的读取Excel。不过,它貌似仅限于简单的映射关系,并且不能写入,大部分情况下不能满足复杂一点的业务需求。

    最后,我找到了一个非常强大的库——EPPlus,感觉上基本上该有的功能都有了,并且有比较友好的API。如下是一个简单的例子:

        using (var p = new ExcelPackage())
        {
            var sheet = p.Workbook.Worksheets.Add("My Sheet");
    
            //Cells的起始索引是1
            sheet.Cells[1, 1].Value = 0;
            sheet.Cells[2, 1].Value = 1;
            sheet.Cells[3, 1].Value = 2;
            sheet.Cells[4, 1].Value = 3;
    
            p.SaveAs(new FileInfo(@"r:output.xlsx"));
        }

    感觉上比NPOI友好多了。 效果如下:

        

    这个例子比较简单,更复杂一点的例子可以参考这个文章:http://zeeshanumardotnet.blogspot.com/2010/08/creating-advanced-excel-2007-reports-on.html(需要FQ)。或者它的官方帮助文档:http://epplus.codeplex.com/wikipage?title=FAQ&referringTitle=Documentation

    最后,提一下这个库的一点不足——它只支持XLSX格式,不支持Office2003的Excel格式,不过到现在这个也不是什么问题了。

  • 相关阅读:
    结巴分词 0.14 版发布,Python 中文分词库
    Lazarus 1.0.2 发布,Pascal 集成开发环境
    Android全屏 去除标题栏和状态栏
    服务器日志现 Android 4.2 传将添多项新特性
    Percona XtraBackup 2.0.3 发布
    长平狐 Android 强制设置横屏或竖屏 设置全屏
    NetBeans 7.3 Beta 发布,全新的 HTML5 支持
    CppDepend现在已经支持Linux
    GromJS 1.7.18 发布,服务器端的 JavaScript
    Apache OpenWebBeans 1.1.6 发布
  • 原文地址:https://www.cnblogs.com/superfeeling/p/7479264.html
Copyright © 2011-2022 走看看