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格式,不过到现在这个也不是什么问题了。

  • 相关阅读:
    开发网站邮件发送模块
    HttpModule的Init事件
    一个产品留言统计查寻的分析比较
    Js中清空文件上传字段(input type=file )
    Asp.net生成Excel报表
    jQuery与开发的相关js文件包含顺序
    trycatch 与 Response.End()
    asp.net2.0中的Usercontrol动态创建
    客户javascript端验证图片文件大小与规格使用Image对象
    JQuery 常用代码收集
  • 原文地址:https://www.cnblogs.com/superfeeling/p/7479264.html
Copyright © 2011-2022 走看看