前言
导出Excel,对于大多数人来说应该是太简单的了。
并且,之前在弄机房收费的时候也用过,
确实是没有什么难度。
循环遍历
但是说了不怕笑话的,就这么个功能,整整弄了两天。
开始的时候当然就是最傻的遍历塞数据
不过,不得不说的是真的是慢,如果哪个公司用这种方式,真的那就别混了
更可笑的是,我还为此加了个多线程,乱七八糟写了一大堆
当然,最后的结果肯定就是代码全废了,从新写。
正文
NOPI
今天就是想简单的提一下微软的NOPI,挺好用的
目的就是,给不知道的小伙伴分享一下,有这么个东西,已经了解的就当我没说。
对于什么excel导入、导出啊~word啊~还有什么我也不太清楚,反正是挺好用的
有需要的童鞋可以继续去网络上查看更多资料
我就使用他的这么一个导出Excel的小功能,进行一下简单的阐述
然后在说之前我先说一点注意的
此方法不适用于数据量很大的情况的,因为比较占内存
还有就是说一下效果吧,先是用那个很傻的办法,不到两万条数据,字段不到十个,用了5分多钟
用了NOPI之后用了不到2秒钟
如果这还没有引起你的注意的话,那后面也不用看了
代码
首先在使用前,需要先应用几个dll
然后在类中还需要引用一下
最后,给小伙伴们展示一下代码(我尽可量的放了少量的代码
主要是怕有的童鞋,一眼看上去代码好多,感觉此方法很麻烦,其实不然,挺简单的)
public void ExportExcel()
{
Entity[] list = getData();
//Entity在这里是一个实体集合,主要用于承载数据,你想用什么装数据都行
//getData()是一个获取数据的方法,我是直接从数据库查出来的,这里就不给大家看了
//这里,对这个刚刚获取的数据承载体进行一下判空什么的,我这里也不写了
//下面这是对电脑中文件夹的操作和导出数据没有直接关系,但是我还是想给大家看一下
string filePath = System.AppDomain.CurrentDomain.BaseDirectory;
//获取文件的路径,此路径为该程序的bin\debug下,注意我的用词是debug下,
//言下之意是debug后面还有一个“\”,客官们还可以自行百度,获取其他相关路径
//根据项目需求,我需要将文件导出到debug下的一个文件夹中,客官可根据自身需求修改
//判断是否存在这么一个文件夹,没有的话,就创建一下。
if(!Directory.Exists(filePath + "我是一个文件夹名"))
{
Directory.CreateDirectory(filePath + "我是一个文件夹名");
}
using(Stream fs = new FileStream(filePath + @"我是一个文件夹名\我是一个文件名.我是文件后缀名",FileModel.Create,FileAccess.Write))
{
XSSFWorkbook work = new XSSFWorkbook();
//创建一个文件
ISheet sheet = work.CreateSheet("我是一个表单名");
//创建一个sheet,并命名
//添加表头 数 据
IRow row = sheet.CreateRow(0);
//创建sheet中的一行,0表示第一行
//下面的cell是指单元格,表示上面刚刚创建的那一行中的单元格
//其中0,1,2表示,这一行横着数第几个单元格,索引从0开始
ICell cell1 = row.CreateCell(0, CellType.String);
cell1.SetCellValue("表头中的第一个字段");
ICell cell2 = row.CreateCell(1, CellType.String);
cell2.SetCellValue("表头中的第二个字段");
ICell cell3 = row.CreateCell(2, CellType.String);
cell2.SetCellValue("表头中的第三个字段");
//添加数据,相关注释参考 表头
for (int i = 0;i < list.Count(); i++)
{
row = sheet.CreateRow(i + 1)
cell1 = row.CreateCell(0, CellType.String);
cell1.SetCellValue(list[i].我是实体中的某个字段名);
cell2 = row.CreateCell(1, CellType.String);
cell2.SetCellValue(list[i].我是实体中的某个字段名);
cell3 = row.CreateCell(2, CellType.String);
cell3.SetCellValue(list[i].我是实体中的某个字段名);
}
work.Write(fs);
}
}
给客官们看了代码,之后也就没什么了
不知道哪个客官有对于大数据的导出方式,我非常愿意学习
结语
想说点什么,但是那句话,不好说