C#利用NOPI导出到Excel

时间:2021-07-04 14:36:37



前言



  导出Excel,对于大多数人来说应该是太简单的了。

  并且,之前在弄机房收费的时候也用过,

  确实是没有什么难度。


  循环遍历


  但是说了不怕笑话的,就这么个功能,整整弄了两天。


  开始的时候当然就是最傻的遍历塞数据


  不过,不得不说的是真的是慢,如果哪个公司用这种方式,真的那就别混了


  更可笑的是,我还为此加了个多线程,乱七八糟写了一大堆


  当然,最后的结果肯定就是代码全了,从新写。



正文


  NOPI

  今天就是想简单的提一下微软的NOPI,挺好用的


  目的就是,给不知道的小伙伴分享一下,有这么个东西,已经了解的就当我没说。


  对于什么excel导入、导出啊~word啊~还有什么我也不太清楚,反正是挺好用的

  有需要的童鞋可以继续去网络上查看更多资料


  我就使用他的这么一个导出Excel的小功能,进行一下简单的阐述


  然后在说之前我先说一点注意的

  此方法不适用于数据量很大的情况的,因为比较占内存


  还有就是说一下效果吧,先是用那个很傻的办法,不到两万条数据,字段不到十个,用了5分多钟

  用了NOPI之后用了不到2秒钟

  如果这还没有引起你的注意的话,那后面也不用看了


  代码


  首先在使用前,需要先应用几个dll

  C#利用NOPI导出到Excel

  

  然后在类中还需要引用一下

  C#利用NOPI导出到Excel


  最后,给小伙伴们展示一下代码(我尽可量的放了少量的代码

  主要是怕有的童鞋,一眼看上去代码好多,感觉此方法很麻烦,其实不然,挺简单的)

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


  给客官们看了代码,之后也就没什么了


  不知道哪个客官有对于大数据的导出方式,我非常愿意学习


结语


想说点什么,但是那句话,不好说