LinqToExcel: LINQ查询Excel电子表格

Linq的强大人所共知,能不能将Linq扩展到读取excel呢?

答案当然是肯定的。

LinqToExcel就是一个实现了使用Linq语法查询excel表格的.net开源类库。

在nuget搜索下载安装到项目,添加using LinqToExcel引用,然后参见如下代码使用:

 

       rtb_Result.Text = "LinqTOExcel的使用(支持Excel2003及以下版本。)\n";
            OpenFileDialog excelOpener = new OpenFileDialog();
            excelOpener.Filter = "Excel文件|*.xls";
            if (excelOpener.ShowDialog() == DialogResult.OK)
            {
                var excel = new ExcelQueryFactory(excelOpener.FileName);
                var dataList = from c in excel.Worksheet("数学")
                                  select c;
                int count = dataList.Count();
                rtb_Result.AppendText(string.Format("从Excel读取到{0}行信息,将会显示到textbox中。\n", count));
                foreach (var mapping in dataList)
                {
                    string dbStr = string.Format("{0} {1} {2}", mapping["学号"].ToString(), mapping["姓名"].ToString(), mapping["成绩"].ToString());
                    rtb_Result.AppendText(dbStr);
                    rtb_Result.AppendText("\n");
                }
                rtb_Result.AppendText("读取完毕。");
            }
            else
            {
                rtb_Result.AppendText("没有选择合适的Excel文件。");
            }

 

对形如上面的excel表格,读取到的内容如下:

 

 

参考:

官网:https://github.com/paulyoder/LinqToExcel

文摘:http://typecastexception.com/post/2013/09/25/C-Query-Excel-and-CSV-Files-Using-LinqToExcel.aspx

 

备注:

之所以在例子里只是读取xls,是因为xlsx在本机老读取失败。

我尝试搜素解决方法,一般都是下载AccessDatabaseEngine.exe,可是不行,因为项目只是需要读取一个表格内容并且更新到数据库即可,就没有解决这个问题了……

http://www.cnblogs.com/dwfbenben/archive/2011/12/13/2286058.html

上面是疑似解决方法,不知道可用不……

转载于:https://www.cnblogs.com/AlvinLiang/p/4177815.html

我们读取和写入Excel 经常使用NPOI工具,如果我们的需求只是需要读取Excel,可以考虑使用LinqToExcel这个组件。这个组件用起来简单、实用、操作方便,而且结合了Linq查询特性,excel版本不仅支持2003,而且连wps表格都支持(后缀名为.et),csv文件更不在话下了。项目地址:https://github.com/paulyoder/LinqToExcel在使用之前:1.添加引用,通过Nuget 来添加是最方便的了,这里要注意的32/64问题。LinqToExcel.dll Remotion.Data.Linq.dll2.添加命名空间using LinqToExcel;//取得数据,只需要一行代码var execelfile = new ExcelQueryFactory(sample.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();    那如何转成相应的实体集合呢? LinqToExcel还具有Mapping 功能,如果类的属性名和Excel里的表头名字如果是英文,(区分大小写)必须与属性名保持一致,支持中文属性名和表头。接着就是一个常遇到的需求,虽然说 Excel 的字段定义是英文,但是读出来的时候必须要是更有意义的字词,这时候就可以利用 LinqToExcel 的 AddMapping 功能来达到。 github:https://github.com/paulyoder/LinqToExcelnuget: https://www.nuget.org/packages/LinqToExcel/ 和 https://www.nuget.org/packages/LinqToExcel_x64/  标签:LinqToExcel
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值