C#NPOI导出Excel详解

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;
                //故障码DTC
                rowTemp.CreateCell(0).SetCellValue(listFaultInfo[i].DTC);
            }

这是关于设置NPOI导出Excel的样式设置。
C#NPOI导出Excel详解_第1张图片
还可以设置字体的颜色是通过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");//0
            row1.CreateCell(1).SetCellValue("故障码(hex)");//1
            row1.CreateCell(2).SetCellValue("故障码英文描述");//2
            row1.CreateCell(3).SetCellValue("故障码中文描述");//3
            row1.CreateCell(4).SetCellValue("故障码运行条件");//4
            row1.CreateCell(5).SetCellValue("故障码设置条件");//5
            row1.CreateCell(6).SetCellValue("故障码设置时发生的操作");//6
            row1.CreateCell(7).SetCellValue("故障恢复条件");//7
            row1.CreateCell(8).SetCellValue("激近故障灯原则");//8
            row1.CreateCell(9).SetCellValue("熄灭故障灯原则");//9
            row1.CreateCell(10).SetCellValue("清除故障码条件");//10
            row1.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;
                //故障码DTC
                rowTemp.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("
"
, " ")); //故障码设置条件 rowTemp.CreateCell(5).SetCellValue(listFaultInfo[i].SetCriteria.Replace("
"
, " ")); //故障码设置时发生的操作 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("
"
," ")); 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详解_第2张图片

你可能感兴趣的:(C#,专题技术,C#NPOI导出Excel详解)