C#NPOI导出Excel详解

开发工具与技术:工具:Visual Studio/C#.Net,技术:C#
作者:刘胜
撰写时间:2019-05-08


NPOI简介

NOP是一个开源的C#读写Excel、WORD等微软OLE2组件的项目,使用NPOI你就可以在没有安装Office或者相应的机器上对WORD/EXCEL文件档进行读写。

实例
首先创建HSSWorkbook的对象用来调用NPOI文件,如果你导入的数据时没有调用ICellStyle类的对象设置的样式话,那么出来的数据在Excel是不加任何的样式。也就是说数据过多的话,数据会挤在一排,而且超出会隐藏。所以要设置ICellStyle的属性才行。

//二:代码创建一个Excel表格(这里称为工作簿)
//创建Excel文件的对象 工作簿(调用NPOI文件)
HSSFWorkbook excelBook = new HSSFWorkbook();
ICellStyle style = excelBook.CreateCellStyle();

关于ICellStyle怎么调用下面有详细的,先创建Excel工作表Sheet,再创建Excel表格的第一行是头部的标题。

//创建Excel工作表 Sheet=故障码信息
ISheet sheet1 = excelBook.CreateSheet("某某");
IRow row1 = sheet1.CreateRow(0);
//给标题的每一个单元格赋值
row1.CreateCell(0).SetCellValue("故障码DTC");//0

如果要添加每行数据,可以用for()循环先填充Sheet1对象的CreateRow()行索引,给每一个单元格添加值。

//查询数据
var listFaultInfo = listFaultCodePush(FaultCodeID, DTC);
//添加数据行:将表格数据逐步写入sheet1各个行中(也就是给每一个单元格赋值)for (int i = 0; i < listExaminee.Count; i++){//sheet1.CreateRow(i).//创建行IRow rowTemp = sheet1.CreateRow(i + 1);rowTemp.Height = 62 * 20;//故障码DTCrowTemp.CreateCell(0).SetCellValue(listFaultInfo[i].DTC);}

这是关于设置NPOI导出Excel的样式设置。

还可以设置字体的颜色是通过IFont去设置

IFont font = excelBook.CreateFont();
font.Color = IndexedColors.RED.Index;
style1.SetFont(font);

最后输出文件名称,将工作薄写入文件流

//输出的文件名称string fileName = "故障码信息" + DateTime.Now.ToString("yyyy-MM-dd-HH-mm-ss-ffff") + ".xls";//把Excel转为流,输出//创建文件流System.IO.MemoryStream bookStream = new System.IO.MemoryStream();//将工作薄写入文件流excelBook.Write(bookStream);//输出之前调用Seek(偏移量,游标位置) 把0位置指定为开始位置bookStream.Seek(0, System.IO.SeekOrigin.Begin);//Stream对象,文件类型,文件名称return File(bookStream, "application/vnd.ms-excel", fileName);

下面我用一个实例来举例,见下面代码

#region NPOI导出到Excel //NPOI导出到Excel(故障码)public ActionResult ExportToExcel(string DTC){int FaultCodeID = 0;//故障码ID//查询数据var listFaultInfo = listFaultCodePush(FaultCodeID, DTC);List<PlatformClass> listExaminee = listFaultInfo;//二:代码创建一个Excel表格(这里称为工作簿)//创建Excel文件的对象 工作簿(调用NPOI文件)HSSFWorkbook excelBook = new HSSFWorkbook();ICellStyle style1 = excelBook.CreateCellStyle();//声明style1对象,设置Excel表格的样式ICellStyle style2 = excelBook.CreateCellStyle();ICellStyle style3 = excelBook.CreateCellStyle();IFont font = excelBook.CreateFont();font.Color = IndexedColors.RED.Index;style3.SetFont(font);style1.Alignment = HorizontalAlignment.JUSTIFY;//两端自动对齐(自动换行)style1.VerticalAlignment = VerticalAlignment.CENTER;style2.Alignment = HorizontalAlignment.CENTER;style2.VerticalAlignment = VerticalAlignment.CENTER;style3.Alignment = HorizontalAlignment.CENTER;style3.VerticalAlignment = VerticalAlignment.CENTER;//创建Excel工作表 Sheet=故障码信息ISheet sheet1 = excelBook.CreateSheet("故障码信息");//给Sheet(故障码信息)添加第一行的头部标题IRow row1 = sheet1.CreateRow(0);//给标题的每一个单元格赋值row1.CreateCell(0).SetCellValue("故障码DTC");//0row1.CreateCell(1).SetCellValue("故障码(hex)");//1row1.CreateCell(2).SetCellValue("故障码英文描述");//2row1.CreateCell(3).SetCellValue("故障码中文描述");//3row1.CreateCell(4).SetCellValue("故障码运行条件");//4row1.CreateCell(5).SetCellValue("故障码设置条件");//5row1.CreateCell(6).SetCellValue("故障码设置时发生的操作");//6row1.CreateCell(7).SetCellValue("故障恢复条件");//7row1.CreateCell(8).SetCellValue("激近故障灯原则");//8row1.CreateCell(9).SetCellValue("熄灭故障灯原则");//9row1.CreateCell(10).SetCellValue("清除故障码条件");//10row1.GetCell(0).CellStyle = style2;//初始化设置样式row1.GetCell(1).CellStyle = style2;//初始化设置样式row1.GetCell(2).CellStyle = style2;//初始化设置样式row1.GetCell(3).CellStyle = style2;//初始化设置样式row1.GetCell(4).CellStyle = style2;//初始化设置样式row1.GetCell(5).CellStyle = style2;//初始化设置样式row1.GetCell(6).CellStyle = style2;//初始化设置样式row1.GetCell(7).CellStyle = style2;//初始化设置样式row1.GetCell(8).CellStyle = style2;//初始化设置样式row1.GetCell(9).CellStyle = style2;//初始化设置样式row1.GetCell(10).CellStyle = style2;//初始化设置样式sheet1.SetColumnWidth(0, 10 * 256);//初始化设置宽度sheet1.SetColumnWidth(0, 10 * 256);//初始化设置宽度sheet1.SetColumnWidth(0, 10 * 256);//初始化设置宽度sheet1.SetColumnWidth(0, 10 * 256);//初始化设置宽度sheet1.SetColumnWidth(1, 10 * 256);//初始化设置宽度sheet1.SetColumnWidth(0, 10 * 256);//初始化设置样式sheet1.SetColumnWidth(2, 17 * 256);//初始化设置宽度sheet1.SetColumnWidth(3, 30 * 256);//初始化设置宽度sheet1.SetColumnWidth(4, 34 * 256);//初始化设置宽度sheet1.SetColumnWidth(5, 20 * 256);//初始化设置宽度sheet1.SetColumnWidth(6, 26 * 256);//初始化设置宽度sheet1.SetColumnWidth(7, 29 * 256);//初始化设置宽度sheet1.SetColumnWidth(8, 14 * 256);//初始化设置宽度sheet1.SetColumnWidth(9, 14 * 256);//初始化设置宽度sheet1.SetColumnWidth(10, 99 * 256);//初始化设置宽度//添加数据行:将表格数据逐步写入sheet1各个行中(也就是给每一个单元格赋值)for (int i = 0; i < listExaminee.Count; i++){//sheet1.CreateRow(i).//创建行IRow rowTemp = sheet1.CreateRow(i + 1);rowTemp.Height = 62 * 20;//故障码DTCrowTemp.CreateCell(0).SetCellValue(listFaultInfo[i].DTC);//故障码(hex)rowTemp.CreateCell(1).SetCellValue(listFaultInfo[i].HEX);//故障码英文描述rowTemp.CreateCell(2).SetCellValue(listFaultInfo[i].EfaultCode);//故障码中文描述rowTemp.CreateCell(3).SetCellValue(listFaultInfo[i].CfaultCode);///故障码运行条件rowTemp.CreateCell(4).SetCellValue(listFaultInfo[i].OperatingCondition.Replace("<br>", " "));//故障码设置条件rowTemp.CreateCell(5).SetCellValue(listFaultInfo[i].SetCriteria.Replace("<br>", " "));//故障码设置时发生的操作rowTemp.CreateCell(6).SetCellValue(listFaultInfo[i].SetingOperation);//故障恢复条件rowTemp.CreateCell(7).SetCellValue(listFaultInfo[i].RestoreConditions);//激近故障灯原则rowTemp.CreateCell(8).SetCellValue(listFaultInfo[i].ActivateRule);//熄灭故障灯原则rowTemp.CreateCell(9).SetCellValue(listFaultInfo[i].OutRule);//清除故障码条件rowTemp.CreateCell(10).SetCellValue(listFaultInfo[i].CleanCondition.Replace("<br>"," "));rowTemp.GetCell(0).CellStyle = style3;rowTemp.GetCell(1).CellStyle = style3;rowTemp.GetCell(2).CellStyle = style2;rowTemp.GetCell(3).CellStyle = style2;rowTemp.GetCell(4).CellStyle = style1;rowTemp.GetCell(5).CellStyle = style1;rowTemp.GetCell(6).CellStyle = style1;rowTemp.GetCell(7).CellStyle = style1;rowTemp.GetCell(8).CellStyle = style2;rowTemp.GetCell(9).CellStyle = style2;rowTemp.GetCell(10).CellStyle = style1;}//输出的文件名称string fileName = "故障码信息" + DateTime.Now.ToString("yyyy-MM-dd-HH-mm-ss-ffff") + ".xls";//把Excel转为流,输出//创建文件流System.IO.MemoryStream bookStream = new System.IO.MemoryStream();//将工作薄写入文件流excelBook.Write(bookStream);//输出之前调用Seek(偏移量,游标位置) 把0位置指定为开始位置bookStream.Seek(0, System.IO.SeekOrigin.Begin);//Stream对象,文件类型,文件名称return File(bookStream, "application/vnd.ms-excel", fileName);}#endregion

上面的代码运行的结果如下所示。

C#NPOI导出Excel详解相关推荐

  1. .NET NPOI导出Excel详解

    http://www.cnblogs.com/yinrq/p/5590970.html .NET NPOI导出Excel详解 NPOI,顾名思义,就是POI的.NET版本.那POI又是什么呢?POI是 ...

  2. poi导出excel详解

    创建模板-------放到maven工程-----sec/main/resources/model目录下 第一步:在maven中导入poi 依赖 第二步:controller层 /*** 体检对账对账 ...

  3. linux下java导出execl_POI实现导出EXCEL详解

    1.Apache POI简介 Apache POI是Apache软件基金会的开放源码函式库,POI提供API给Java程式对Microsoft Office格式档案读和写的功能. .NET的开发人员则 ...

  4. vue-json-excel 使用方法 导出excel 详解 以及实际操作 ,通俗易懂

    vue-json-excel 的具体使用方法 1安装 npm install vue-json-excel -S 2在main.js中注册使用 import JsonExcel from 'vue-j ...

  5. Java 实现查询数据库下载导出Excel详解

    Excel表头 测试→下载导出表头文件,也可以改成直接存到本地磁盘目录下. package com.kero99.utils;import java.io.File; import java.io.F ...

  6. java中使用poi导出Excel详解,kotlin音标

    到这个问题,可以设置encoding为双字节.POI可以到www.apache.org下载到. 编译好的jar主要有这样4个:poi包, poi Browser包, poi hdf包, poi hss ...

  7. 【转】用VB操作Excel详解

    用VB操作Excel详解 一. VB读写EXCEL表: VB本身提自动化功能可以读写EXCEL表,其方法如下: 1.在工程中引用MicrosoftExcel 类型库: 从"工程"菜 ...

  8. Winform中通过NPOI导出Excel时通过ICellStyle和IDataFormat格式化日期显示格式

    场景 Winform中通过NPOI导出Excel的三种方式(HSSFWorkbook,XSSFWorkbook,SXSSFWorkbook)附代码下载: https://blog.csdn.net/B ...

  9. Winforn中通过NPOI导出Excel时通过XSSFClientAnchor和XSSFPicture添加图片

    场景 Winform中通过NPOI导出Excel的三种方式(HSSFWorkbook,XSSFWorkbook,SXSSFWorkbook)附代码下载: https://blog.csdn.net/B ...

最新文章

  1. 常用的方法论-鱼骨图
  2. sqlite3数据库教程
  3. oracle执行命令显示2,Oracle数据库执行脚本常用命令小结
  4. JavaScript的作用域和上下文
  5. Java之序列化和反序列化
  6. 启动go服务_使用Go构建TCP并发服务器,这种方式原来这么简单
  7. 武汉大学计算机学院推免率,武汉大学保研率
  8. 试验设计与方差分析的基本原理——以单因素试验为例
  9. 单层感知器的学习规则
  10. CodecContext->gop_size 是什么
  11. 谈谈新加坡的电子政务
  12. Linux命令暂停进程,shell脚本不暂停进程,暂停几秒执行下一条shell命令
  13. Android:执行exec app_process启动jar失败原因
  14. 解决windows有线连接不上问题
  15. 深度学习入门(转)(备用)
  16. 推荐几款好用的UI设计工具
  17. 用python生成个性二维码
  18. CVPR 2019 论文解读 | 基于多级神经纹理迁移的图像超分辨方法 (Adobe Research)
  19. LA3708:Graveyard
  20. 论文笔记 ACL2021|CLEVE-Contrastive Pre-training for Event Extraction

热门文章

  1. linux查看内存空间分配情况,也看linux内存去哪儿了
  2. mysql查最高薪水_【Leetcode】Mysql查询第N高的薪水
  3. “任知阁”真的很不错
  4. i国网app苹果版_话本小说app下载-话本小说苹果版「正版小说免费看」
  5. OSChina 周五乱弹 ——程序员竟然对服务员做了这样的事情!!!
  6. 计算机专业留学动机信范文,出国留学,如何写好动机信(Motivation Letter)?
  7. CSDN 第 11 次竞赛题解
  8. 运动目标跟踪算法综述
  9. 小白遇见Servlet
  10. 小米8se android q,小米8 SE开始测试安卓Q系统, 国产第一款