使用NPOI做Excel简单报表

这篇具有很好参考价值的文章主要介绍了使用NPOI做Excel简单报表。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。


使用NPOI做Excel简单报表
前言

前面介绍了NPOI单元格样式的使用、单元格合并,以及NPOI提供的颜色。现在用上前面的一些知识点,做一个测试结果表格。

1、 介绍NPOI 的颜色卡、名称以及索引 https://editor.csdn.net/md/?articleId=130265415
2、 NPOI的CellStyle单元格样式 https://editor.csdn.net/md/?articleId=130245869
3、 将DataTable中的数据保存到Excel (二) 使用NPOI https://editor.csdn.net/md/?articleId=130225379

初版表格,单元格的合并

先上一个简单版本的,主要内容在于跨行和跨列单元格的合并。涉及的主要函数是Sheet的AddMergedRegion 以及NPOI.SS.Util.CellRangeAddress这两个函数。
这里使用的NPOI版本是 2.0.6.0, 框架 .NET Framework 4.0。

using NPOI.HSSF.Util;
using NPOI.HSSF.UserModel;
using NPOI.SS.UserModel;
        /// <summary>
        /// 合并单元格
        /// </summary>
        void MergeCell()
        {
            //创建工作簿对象
            HSSFWorkbook workBook = new HSSFWorkbook();

            //创建一个sheet
            ISheet sheet = workBook.CreateSheet("MergeTable");

            IRow row;
            ICell cell;

            //行索引
            int rowIndex = 0;

            //标题
            row = sheet.CreateRow(rowIndex);
            cell = row.CreateCell(0);
            cell.SetCellValue("测试报告");
            for (int i=1; i<8; i++)
            {
                cell = row.CreateCell(i);
            }
            //单元格合并 合并列
            sheet.AddMergedRegion(new NPOI.SS.Util.CellRangeAddress(rowIndex, rowIndex, 0, 7));
            rowIndex++;


            row = sheet.CreateRow(rowIndex);
            cell = row.CreateCell(0);
            cell.SetCellValue("机型:单相   功率:2.2kw   电流:1.8A  测试时间:2023/04/20  耗时:3分钟");
            for (int i = 1; i < 8; i++)
            {
                cell = row.CreateCell(i);
            }
            //单元格合并 合并列
            sheet.AddMergedRegion(new NPOI.SS.Util.CellRangeAddress(rowIndex, rowIndex, 0, 7));
            rowIndex++;

            //记录起始项
            int startIndex = rowIndex;
            //第一个小表格的标题
            row = sheet.CreateRow(rowIndex);
            cell = row.CreateCell(0);
            cell.SetCellValue("品质测试");
            List<string> valueList = new List<string>()
            {
                "序号","测试项", "产品", "合格数据", "测试结果"
            };
            for (int i = 0; i < valueList.Count; i++)
            {
                cell = row.CreateCell(i+1);
                cell.SetCellValue (valueList[i]);
            }
            rowIndex++;


            //第一条测试结果
            row = sheet.CreateRow(rowIndex);
            valueList.Clear();
            valueList.AddRange(new string[]
            {
              "", "1", "通讯测试","成功", "", "/", "", "合格"
            });
            
            for (int i = 0; i < valueList.Count; i++)
            {
                cell = row.CreateCell(i);
                cell.SetCellValue(valueList[i]);
            }
            //单元格合并 合并列
            sheet.AddMergedRegion(new NPOI.SS.Util.CellRangeAddress(rowIndex, rowIndex, 3, 4));
            sheet.AddMergedRegion(new NPOI.SS.Util.CellRangeAddress(rowIndex, rowIndex, 5, 6));
            rowIndex++;

            //第二条测试结果
            row = sheet.CreateRow(rowIndex);
            valueList.Clear();
            valueList.AddRange(new string[]
            {
               "", "2", "温度测试","25℃", "", "23-30℃", "", "合格"
            });

            for (int i = 0; i < valueList.Count; i++)
            {
                cell = row.CreateCell(i);
                cell.SetCellValue(valueList[i]);
            }
            //单元格合并 合并列
            sheet.AddMergedRegion(new NPOI.SS.Util.CellRangeAddress(rowIndex, rowIndex, 3, 4));
            sheet.AddMergedRegion(new NPOI.SS.Util.CellRangeAddress(rowIndex, rowIndex, 5, 6));
            rowIndex++;


            //第三条测试结果
            row = sheet.CreateRow(rowIndex);
            valueList.Clear();
            valueList.AddRange(new string[]
            {
                "", "3", "故障测试","E001", "", "/", "", "不合格"
            });

            for (int i = 0; i < valueList.Count; i++)
            {
                cell = row.CreateCell(i);
                cell.SetCellValue(valueList[i]);
            }
            //单元格合并 合并列
            sheet.AddMergedRegion(new NPOI.SS.Util.CellRangeAddress(rowIndex, rowIndex, 3, 4));
            sheet.AddMergedRegion(new NPOI.SS.Util.CellRangeAddress(rowIndex, rowIndex, 5, 6));

            //品质测试 要跨行
            sheet.AddMergedRegion(new NPOI.SS.Util.CellRangeAddress(startIndex, rowIndex, 0, 0));

            rowIndex++;



            startIndex = rowIndex;
            //第二个 小表格
            row = sheet.CreateRow(rowIndex);
            cell = row.CreateCell(0);
            cell.SetCellValue("性能测试");
            valueList.Clear();
            valueList.AddRange(new string[]
            {
                "序号","测试项", "产品", "对比项", "最小值" ,"最大值", "测试结果"
            });

            for (int i = 0; i < valueList.Count; i++)
            {
                cell = row.CreateCell(i+1);
                cell.SetCellValue(valueList[i]);
            }
            rowIndex++;

            //第一条测试结果
            row = sheet.CreateRow(rowIndex);
            valueList.Clear();
            valueList.AddRange(new string[]
            {
              "", "1", "版本检测","112", "112", "", "", "合格"
            });

            for (int i = 0; i < valueList.Count; i++)
            {
                cell = row.CreateCell(i);
                cell.SetCellValue(valueList[i]);
            }
            rowIndex++;


            //第二条测试结果
            row = sheet.CreateRow(rowIndex);
            valueList.Clear();
            valueList.AddRange(new string[]
            {
               "","2", "带载检测","10.4/10.2", "", "10.1", "10.6", "合格"
            });

            for (int i = 0; i < valueList.Count; i++)
            {
                cell = row.CreateCell(i);
                cell.SetCellValue(valueList[i]);
            }
            //品质测试 要跨行
            sheet.AddMergedRegion(new NPOI.SS.Util.CellRangeAddress(startIndex, rowIndex, 0, 0));
            rowIndex++;

            row = sheet.CreateRow(rowIndex);
            cell = row.CreateCell(0);
            cell.SetCellValue("测试总结果:");
            for (int i = 1; i < valueList.Count; i++)
            {
                cell = row.CreateCell(i+1);
                if( i == 3)
                {
                    cell.SetCellValue("不合格");
                }
            }
            //单元格合并 合并列
            sheet.AddMergedRegion(new NPOI.SS.Util.CellRangeAddress(rowIndex, rowIndex, 0, 2));
            sheet.AddMergedRegion(new NPOI.SS.Util.CellRangeAddress(rowIndex, rowIndex, 3, 7));

        
            using (FileStream file = new FileStream(@"测试结果.xls", FileMode.Create))
            {
                workBook.Write(file);
                file.Close();
            }
        }

效果图:
使用NPOI做Excel简单报表

进阶表格,单元格美化

设置行高列宽,对单元格的对齐方式、边框、字体大小IFont、颜色进行设置美化, 使用的是ICellStyle.
先看一下最终的效果图,由结果分析向上分析。
使用NPOI做Excel简单报表

测试报告
行高30,居中显示,字体: 黑体,16号,加粗, 设置单元格边框。

            //大标题 黑体 16号 加边框  居中显示 行高30
            string fontName = "黑体";
            ICellStyle totalHeader = workBook.CreateCellStyle();
            //垂直居中对齐
            totalHeader.Alignment = NPOI.SS.UserModel.HorizontalAlignment.Center;
            totalHeader.VerticalAlignment = VerticalAlignment.Center;
            //边框
            totalHeader.BorderTop = NPOI.SS.UserModel.BorderStyle.Thin;
            totalHeader.BorderBottom = NPOI.SS.UserModel.BorderStyle.Thin;
            totalHeader.BorderLeft = NPOI.SS.UserModel.BorderStyle.Thin;
            totalHeader.BorderRight = NPOI.SS.UserModel.BorderStyle.Thin;

            //字体
            IFont totalFont = workBook.CreateFont();
            totalFont.FontName = fontName;
            totalFont.FontHeightInPoints = 16;
            totalFont.Boldweight = (short)NPOI.SS.UserModel.FontBoldWeight.Bold;
            totalHeader.SetFont(totalFont);

第二行 机型
行高20, 居中显示, 字体 :微软雅黑12号 设置单元格边框。

           //中间行样式 机型 行高20 居中显示 字体 微软雅黑12号 加边框
            ICellStyle lineStyle = workBook.CreateCellStyle();
            //垂直居中对齐
            lineStyle.Alignment = NPOI.SS.UserModel.HorizontalAlignment.Center;
            lineStyle.VerticalAlignment = VerticalAlignment.Center;
            //边框
            lineStyle.BorderTop = NPOI.SS.UserModel.BorderStyle.Thin;
            lineStyle.BorderBottom = NPOI.SS.UserModel.BorderStyle.Thin;
            lineStyle.BorderLeft = NPOI.SS.UserModel.BorderStyle.Thin;
            lineStyle.BorderRight = NPOI.SS.UserModel.BorderStyle.Thin;
            //字体大小
            IFont midFont = workBook.CreateFont();
            midFont.FontHeightInPoints = 12;
            midFont.FontName = "微软雅黑";
            lineStyle.SetFont(midFont);

左侧跨单元格 品质(性能)测试 总结果
居中显示, 字体微软雅黑12号加粗 ,设置单元格边框。在单元格合并后再设置样式。

          //左侧跨行单元格的样式 居中显示 字体微软雅黑12号加粗 设置单元格边框
            ICellStyle leftCellStyle = workBook.CreateCellStyle();
            //对齐
            leftCellStyle.Alignment = NPOI.SS.UserModel.HorizontalAlignment.Center;
            leftCellStyle.VerticalAlignment = VerticalAlignment.Center;
            //边框
            leftCellStyle.BorderTop = NPOI.SS.UserModel.BorderStyle.Thin;
            leftCellStyle.BorderBottom = NPOI.SS.UserModel.BorderStyle.Thin;
            leftCellStyle.BorderLeft = NPOI.SS.UserModel.BorderStyle.Thin;
            leftCellStyle.BorderRight = NPOI.SS.UserModel.BorderStyle.Thin;
            //字体大小
            IFont leftFont = workBook.CreateFont();
            leftFont.FontHeightInPoints = 12;
            leftFont.FontName = "微软雅黑";
            leftFont.Boldweight = (short)(short)NPOI.SS.UserModel.FontBoldWeight.Bold; ;
            leftCellStyle.SetFont(leftFont);

带背景小标题
行高20,居中显示,字体字体微软雅黑12号,设置单元格边框,设置背景色。
要想设置的背景色起作用,必须要设置 midTitleStyle.FillPattern = FillPattern.SolidForeground;这句

          //小标题的样式 行高20,居中显示,字体字体微软雅黑12号,设置单元格边框,设置背景色
            ICellStyle midTitleStyle = workBook.CreateCellStyle();
            //对齐
            midTitleStyle.Alignment = NPOI.SS.UserModel.HorizontalAlignment.Center;
            midTitleStyle.VerticalAlignment = VerticalAlignment.Center;
            //边框
            midTitleStyle.BorderTop = NPOI.SS.UserModel.BorderStyle.Thin;
            midTitleStyle.BorderBottom = NPOI.SS.UserModel.BorderStyle.Thin;
            midTitleStyle.BorderLeft = NPOI.SS.UserModel.BorderStyle.Thin;
            midTitleStyle.BorderRight = NPOI.SS.UserModel.BorderStyle.Thin;
            //需要设置图例,颜色才会起作用
            midTitleStyle.FillPattern = FillPattern.SolidForeground;

            //背景颜色
            midTitleStyle.FillForegroundColor = HSSFColor.Grey25Percent.Index;
            midTitleStyle.SetFont(midFont);

中间的测试内容
行高15,左对齐,设置单元格边框。

            //内容的样式  行高15 左对齐 设置单元格边框
            ICellStyle contentStyle = workBook.CreateCellStyle();
            //对齐
            contentStyle.Alignment = NPOI.SS.UserModel.HorizontalAlignment.Left;
            contentStyle.VerticalAlignment = VerticalAlignment.Center;
            //边框
            contentStyle.BorderTop = NPOI.SS.UserModel.BorderStyle.Thin;
            contentStyle.BorderBottom = NPOI.SS.UserModel.BorderStyle.Thin;
            contentStyle.BorderLeft = NPOI.SS.UserModel.BorderStyle.Thin;
            contentStyle.BorderRight = NPOI.SS.UserModel.BorderStyle.Thin;

全部代码

        /// <summary>
        /// 合并单元格
        /// </summary>
        void MergeCell()
        {
            //创建工作簿对象
            HSSFWorkbook workBook = new HSSFWorkbook();

            //创建一个sheet
            ISheet sheet = workBook.CreateSheet("MergeTable");

            //设置列宽
            sheet.SetColumnWidth(0, 15 * 256);
            sheet.SetColumnWidth(1, 10 * 256);
            sheet.SetColumnWidth(2, 10 * 256);
            sheet.SetColumnWidth(3, 10 * 256);
            sheet.SetColumnWidth(4, 10 * 256);
            sheet.SetColumnWidth(5, 10 * 256);
            sheet.SetColumnWidth(7, 12 * 256);


            IRow row;
            ICell cell;

            //大标题 黑体 16号 加边框  居中显示 行高30
            string fontName = "黑体";
            ICellStyle totalHeader = workBook.CreateCellStyle();
            //垂直居中对齐
            totalHeader.Alignment = NPOI.SS.UserModel.HorizontalAlignment.Center;
            totalHeader.VerticalAlignment = VerticalAlignment.Center;
            //边框
            totalHeader.BorderTop = NPOI.SS.UserModel.BorderStyle.Thin;
            totalHeader.BorderBottom = NPOI.SS.UserModel.BorderStyle.Thin;
            totalHeader.BorderLeft = NPOI.SS.UserModel.BorderStyle.Thin;
            totalHeader.BorderRight = NPOI.SS.UserModel.BorderStyle.Thin;

            //字体
            IFont totalFont = workBook.CreateFont();
            totalFont.FontName = fontName;
            totalFont.FontHeightInPoints = 16;
            totalFont.Boldweight = (short)NPOI.SS.UserModel.FontBoldWeight.Bold;
            totalHeader.SetFont(totalFont);


            //行索引
            int rowIndex = 0;

            //标题
            row = sheet.CreateRow(rowIndex);
            //设置行高
            row.HeightInPoints = 30;
            cell = row.CreateCell(0);
            cell.SetCellValue("测试报告");
            //设置单元格样式
            cell.CellStyle = totalHeader;
            for (int i=1; i<8; i++)
            {
                cell = row.CreateCell(i);
                //设置单元格样式
                cell.CellStyle = totalHeader;

            }
            //单元格合并 合并列
            sheet.AddMergedRegion(new NPOI.SS.Util.CellRangeAddress(rowIndex, rowIndex, 0, 7));
            rowIndex++;


            //中间行样式 机型 行高20 居中显示 字体 微软雅黑12号 加边框
            ICellStyle lineStyle = workBook.CreateCellStyle();
            //垂直居中对齐
            lineStyle.Alignment = NPOI.SS.UserModel.HorizontalAlignment.Center;
            lineStyle.VerticalAlignment = VerticalAlignment.Center;
            //边框
            lineStyle.BorderTop = NPOI.SS.UserModel.BorderStyle.Thin;
            lineStyle.BorderBottom = NPOI.SS.UserModel.BorderStyle.Thin;
            lineStyle.BorderLeft = NPOI.SS.UserModel.BorderStyle.Thin;
            lineStyle.BorderRight = NPOI.SS.UserModel.BorderStyle.Thin;
            //字体大小
            IFont midFont = workBook.CreateFont();
            midFont.FontHeightInPoints = 12;
            midFont.FontName = "微软雅黑";
            lineStyle.SetFont(midFont);

            row = sheet.CreateRow(rowIndex);
            //行高20
            row.HeightInPoints = 20;
            cell = row.CreateCell(0);
            cell.SetCellValue("机型:单相   功率:2.2kw   电流:1.8A  测试时间:2023/04/20  耗时:3分钟");
            //设置样式
            cell.CellStyle = lineStyle;
            for (int i = 1; i < 8; i++)
            {
                cell = row.CreateCell(i);
                cell.CellStyle = lineStyle;
            }
            //单元格合并 合并列
            sheet.AddMergedRegion(new NPOI.SS.Util.CellRangeAddress(rowIndex, rowIndex, 0, 7));
            rowIndex++;


            //小标题的样式 行高20,居中显示,字体字体微软雅黑12号,设置单元格边框,设置背景色
            ICellStyle midTitleStyle = workBook.CreateCellStyle();
            //对齐
            midTitleStyle.Alignment = NPOI.SS.UserModel.HorizontalAlignment.Center;
            midTitleStyle.VerticalAlignment = VerticalAlignment.Center;
            //边框
            midTitleStyle.BorderTop = NPOI.SS.UserModel.BorderStyle.Thin;
            midTitleStyle.BorderBottom = NPOI.SS.UserModel.BorderStyle.Thin;
            midTitleStyle.BorderLeft = NPOI.SS.UserModel.BorderStyle.Thin;
            midTitleStyle.BorderRight = NPOI.SS.UserModel.BorderStyle.Thin;
            //需要设置图例,颜色才会起作用
            midTitleStyle.FillPattern = FillPattern.SolidForeground;

            //背景颜色
            midTitleStyle.FillForegroundColor = HSSFColor.Grey25Percent.Index;
            midTitleStyle.SetFont(midFont);
            


            //内容的样式  行高15 左对齐 设置单元格边框
            ICellStyle contentStyle = workBook.CreateCellStyle();
            //对齐
            contentStyle.Alignment = NPOI.SS.UserModel.HorizontalAlignment.Left;
            contentStyle.VerticalAlignment = VerticalAlignment.Center;
            //边框
            contentStyle.BorderTop = NPOI.SS.UserModel.BorderStyle.Thin;
            contentStyle.BorderBottom = NPOI.SS.UserModel.BorderStyle.Thin;
            contentStyle.BorderLeft = NPOI.SS.UserModel.BorderStyle.Thin;
            contentStyle.BorderRight = NPOI.SS.UserModel.BorderStyle.Thin;


            //左侧跨行单元格的样式 居中显示 字体微软雅黑12号加粗 设置单元格边框
            ICellStyle leftCellStyle = workBook.CreateCellStyle();
            //对齐
            leftCellStyle.Alignment = NPOI.SS.UserModel.HorizontalAlignment.Center;
            leftCellStyle.VerticalAlignment = VerticalAlignment.Center;
            //边框
            leftCellStyle.BorderTop = NPOI.SS.UserModel.BorderStyle.Thin;
            leftCellStyle.BorderBottom = NPOI.SS.UserModel.BorderStyle.Thin;
            leftCellStyle.BorderLeft = NPOI.SS.UserModel.BorderStyle.Thin;
            leftCellStyle.BorderRight = NPOI.SS.UserModel.BorderStyle.Thin;
            //字体大小
            IFont leftFont = workBook.CreateFont();
            leftFont.FontHeightInPoints = 12;
            leftFont.FontName = "微软雅黑";
            leftFont.Boldweight = (short)(short)NPOI.SS.UserModel.FontBoldWeight.Bold; ;
            leftCellStyle.SetFont(leftFont);


            //记录起始项
            int startIndex = rowIndex;
            //第一个小表格的标题
            row = sheet.CreateRow(rowIndex);
            //行高
            row.HeightInPoints = 20;
            cell = row.CreateCell(0);
            cell.SetCellValue("品质测试");
            List<string> valueList = new List<string>()
            {
                "序号","测试项", "产品", "", "合格数据","", "测试结果"
            };
            for (int i = 0; i < valueList.Count; i++)
            {
                cell = row.CreateCell(i+1);
                cell.SetCellValue (valueList[i]);
                //样式
                cell.CellStyle = midTitleStyle;
            }
            //单元格合并 合并列
            sheet.AddMergedRegion(new NPOI.SS.Util.CellRangeAddress(rowIndex, rowIndex, 3, 4));
            sheet.AddMergedRegion(new NPOI.SS.Util.CellRangeAddress(rowIndex, rowIndex, 5, 6));
            rowIndex++;


            //第一条测试结果
            row = sheet.CreateRow(rowIndex);
            row.HeightInPoints = 15;
            valueList.Clear();
            valueList.AddRange(new string[]
            {
              "", "1", "通讯测试","成功", "", "/", "", "合格"
            });
            
            for (int i = 0; i < valueList.Count; i++)
            {
                cell = row.CreateCell(i);
                cell.SetCellValue(valueList[i]);
                //内容样式
                cell.CellStyle = contentStyle;
            }
            //单元格合并 合并列
            sheet.AddMergedRegion(new NPOI.SS.Util.CellRangeAddress(rowIndex, rowIndex, 3, 4));
            sheet.AddMergedRegion(new NPOI.SS.Util.CellRangeAddress(rowIndex, rowIndex, 5, 6));
            rowIndex++;

            //第二条测试结果
            row = sheet.CreateRow(rowIndex);
            row.HeightInPoints = 15;
            valueList.Clear();
            valueList.AddRange(new string[]
            {
               "", "2", "温度测试","25℃", "", "23-30℃", "", "合格"
            });

            for (int i = 0; i < valueList.Count; i++)
            {
                cell = row.CreateCell(i);
                cell.SetCellValue(valueList[i]);
                //内容样式
                cell.CellStyle = contentStyle;
            }
            //单元格合并 合并列
            sheet.AddMergedRegion(new NPOI.SS.Util.CellRangeAddress(rowIndex, rowIndex, 3, 4));
            sheet.AddMergedRegion(new NPOI.SS.Util.CellRangeAddress(rowIndex, rowIndex, 5, 6));
            rowIndex++;


            //第三条测试结果
            row = sheet.CreateRow(rowIndex);
            row.HeightInPoints = 15;
            valueList.Clear();
            valueList.AddRange(new string[]
            {
                "", "3", "故障测试","E001", "", "/", "", "不合格"
            });

            for (int i = 0; i < valueList.Count; i++)
            {
                cell = row.CreateCell(i);
                cell.SetCellValue(valueList[i]);
                //内容样式
                cell.CellStyle = contentStyle;
            }
            //单元格合并 合并列
            sheet.AddMergedRegion(new NPOI.SS.Util.CellRangeAddress(rowIndex, rowIndex, 3, 4));
            sheet.AddMergedRegion(new NPOI.SS.Util.CellRangeAddress(rowIndex, rowIndex, 5, 6));

            //品质测试 要跨行
            sheet.AddMergedRegion(new NPOI.SS.Util.CellRangeAddress(startIndex, rowIndex, 0, 0));
            sheet.GetRow(startIndex).GetCell(0).CellStyle = leftCellStyle;
            rowIndex++;


            startIndex = rowIndex;
            //第二个 小表格
            row = sheet.CreateRow(rowIndex);
            //行高
            row.HeightInPoints = 20;
            cell = row.CreateCell(0);
            cell.SetCellValue("性能测试");
            valueList.Clear();
            valueList.AddRange(new string[]
            {
                "序号","测试项", "产品", "对比项", "最小值" ,"最大值", "测试结果"
            });

            for (int i = 0; i < valueList.Count; i++)
            {
                cell = row.CreateCell(i+1);
                cell.SetCellValue(valueList[i]);
                cell.CellStyle = midTitleStyle;
            }
            rowIndex++;

            //第一条测试结果
            row = sheet.CreateRow(rowIndex);
            row.HeightInPoints = 15;
            valueList.Clear();
            valueList.AddRange(new string[]
            {
              "", "1", "版本检测","112", "112", "", "", "合格"
            });

            for (int i = 0; i < valueList.Count; i++)
            {
                cell = row.CreateCell(i);
                cell.SetCellValue(valueList[i]);
                //内容样式
                cell.CellStyle = contentStyle;
            }
            rowIndex++;


            //第二条测试结果
            row = sheet.CreateRow(rowIndex);
            row.HeightInPoints = 15;
            valueList.Clear();
            valueList.AddRange(new string[]
            {
               "","2", "带载检测","10.4/10.2", "", "10.1", "10.6", "合格"
            });

            for (int i = 0; i < valueList.Count; i++)
            {
                cell = row.CreateCell(i);
                cell.SetCellValue(valueList[i]);
                //内容样式
                cell.CellStyle = contentStyle;
            }
            //性能测试 要跨行
            sheet.AddMergedRegion(new NPOI.SS.Util.CellRangeAddress(startIndex, rowIndex, 0, 0));
            sheet.GetRow(startIndex).GetCell(0).CellStyle = leftCellStyle;

            rowIndex++;

            row = sheet.CreateRow(rowIndex);
            row.HeightInPoints = 20;
            cell = row.CreateCell(0);
            cell.SetCellValue("测试总结果:");
            cell.CellStyle = leftCellStyle;
            for (int i = 1; i < valueList.Count; i++)
            {
                cell = row.CreateCell(i);
                if( i == 3)
                {
                    cell.SetCellValue("不合格");
                }
                cell.CellStyle = leftCellStyle;
            }
            //单元格合并 合并列
            sheet.AddMergedRegion(new NPOI.SS.Util.CellRangeAddress(rowIndex, rowIndex, 0, 2));
            sheet.AddMergedRegion(new NPOI.SS.Util.CellRangeAddress(rowIndex, rowIndex, 3, 7));
            sheet.GetRow(rowIndex).GetCell(0).CellStyle = leftCellStyle;
            sheet.GetRow(rowIndex).GetCell(1).CellStyle = leftCellStyle;


            using (FileStream file = new FileStream(@"测试结果.xls", FileMode.Create))
            {
                workBook.Write(file);
                file.Close();
            }
        }

小结

1 单元格合并 sheet.AddMergedRegion(new NPOI.SS.Util.CellRangeAddress(rowIndex, rowIndex, 0, 2));
2 设置行高 row.HeightInPoints = 20;
3 设置列宽 sheet.SetColumnWidth(0, 15 * 256);
4 样式 ICellStyle leftCellStyle = workBook.CreateCellStyle();
5 字体 IFont font = workBook.CreateFont();文章来源地址https://www.toymoban.com/news/detail-421737.html

到了这里,关于使用NPOI做Excel简单报表的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • C#【必备技能篇】使用NPOI实现对excel的读取和写入

    依次执行下图中的1-6按钮 , 可以通过查看程序文件夹中的excel文件来加深理解。 链接:https://pan.baidu.com/s/19PgQMhCKviw9aBAjmJHSww 提取码:2omi 需要在源码中增加如下引用。相应的dll已更新到 5 的下载地址中。

    2023年04月13日
    浏览(28)
  • 【工具插件类教学】NPOI插件使用Excel表格的导入和导出(包含图片)

    目录 一.导入Excel 解析读取 1.选择导入的目标文件 2.解析读取导入的文件

    2024年01月16日
    浏览(39)
  • Unity 使用NPOI,模板替换Excel中的关键字(针对.xlsx)

    Unity 使用NPOI,模板替换Excel中的(针对.xlsx) 需求:项目中要用到生成Excel来打印文件,只需要替换其中的值,保留原模板,生成新的Excel 第一步:在unity中导入一下的dll 新建一个Plugin的文件夹,把dll全部放进去 以上选中的这些文件在unity的安装目录下 UnityEditorData

    2023年04月24日
    浏览(32)
  • 使用SpringBoot+React搭建一个Excel报表平台

    摘要:本文由葡萄城技术团队于CSDN原创并首发。转载请注明出处:葡萄城官网,葡萄城为开发者提供专业的开发工具、解决方案和服务,赋能开发者。 Excel报表平台是一款功能强大、操作简单的系统平台,可以帮助用户上传、编辑和分析报表数据,实现数据可视化。 本文所

    2024年02月16日
    浏览(29)
  • NPOI操作Excel

    名词介绍: 整个Excel:工作薄 Sheet页:页签,一个工作簿中可以包含多个Sheet页 表格:对应一个Sheet 行、列、单元格 C#中的常规操作: 导出一个Excel:其实就是要生成一个Excel文件,Excel文件对应的文件流 导入一个Excel:读取一个文件,读取文件流,需要从文件流中读取我们需要

    2024年02月12日
    浏览(31)
  • .Net NPOI Excel 导出

    最终效果图      环境:Revit,WPF,NPOI 2.5.6,.Net Framework 4.7.2 右击项目引用,选择 \\\"管理NuGet程序包\\\",在浏览搜索 NPOI ,选择版本(我这里是2.5.6),安装       安装成功后,引用里会出现这四个引用(NPOI,NPOI.OOXML,NPOI.OpenXml4Net,NPOI.OpenXmlFormats) 在NuGet程序包里会多出来这

    2024年02月07日
    浏览(40)
  • NPOI 读取和写入Excel

    在C#中使用NPOI库读取和写入Excel文件,你需要先下载并安装NPOI库。你可以在NuGet管理器中搜索NPOI并进行安装。 以下是一个使用NPOI库进行Excel文件读取和写入的示例: 读取Excel文件: 写入Excel文件: 请注意,在使用NPOI时,记得引入必要的命名空间: NPOI.SS.UserModel 和 NPOI.XSSF.

    2024年02月12日
    浏览(73)
  • C# NPOI操作Excel汇总

    C#操作Excel有多种方法,如通过数据库的方式来读写Excel的OleDb方式,但是OleDb方式需要安装微软office,还可以通过COM组件方式操作Excel,也需要安装微软Excel。如果不想安装微软办公套餐可以使用ClosedXML、EPPlus、NPOI。本文主要是介绍NPOI的常用使用方法。 Apache POI是Apache软件基金

    2024年02月12日
    浏览(31)
  • 【微信小程序】导出 Excel 报表并分享,使用xlsx库生成 Excel,使用echars插入图表、使用pdfmake导出为PDF文件

    要在微信小程序中导出 Excel 报表并分享,可以使用第三方库 xlsx 来生成 Excel 文件,并使用 wx.saveFile 方法将文件保存到本地,然后使用 wx.shareFile 方法来分享文件。 以下是一个示例代码,演示如何在微信小程序中导出 Excel 报表并分享: 首先,安装依赖库 xlsx ,可以使用 npm

    2024年02月13日
    浏览(130)
  • .NET Core NPOI导出复杂Excel

    NPOI GitHub源码地址: GitHub - tonyqus/npoi: a .NET library that can read/write Office formats without Microsoft Office installed. No COM+, no interop. 版本说明: NPOI 2.4.1 (注意不同版本可能使用的姿势有点小差别) 程序包管理器控制台输入一下命令安装: 1 Install-Package NPOI -Version 2.4.1 通过NuGet管理解决方

    2024年02月03日
    浏览(27)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包