使用NPOI做Excel简单报表

news2024/11/13 7:59:14

文章目录

        • 前言
        • 初版表格,单元格的合并
        • 进阶表格,单元格美化
        • 小结

在这里插入图片描述

前言

前面介绍了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();
            }
        }

效果图:
在这里插入图片描述

进阶表格,单元格美化

设置行高列宽,对单元格的对齐方式、边框、字体大小IFont、颜色进行设置美化, 使用的是ICellStyle.
先看一下最终的效果图,由结果分析向上分析。
在这里插入图片描述

测试报告
行高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();

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/448435.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

图片去摩尔纹简述实现python代码示例

这篇文章主要为大家介绍了图片去摩尔纹简述实现的python代码示例&#xff0c;有需要的朋友可以借鉴参考下&#xff0c;希望能够有所帮助&#xff0c;祝大家多多进步&#xff0c;早日升职加薪 1、前言 当感光元件像素的空间频率与影像中条纹的空间频率接近时&#xff0c;可能产生…

分布式系统需要关注的技术点和面试经常问的点

1、分布式系统概述 关于什么是分布式系统&#xff0c;有很多文章介绍&#xff0c;其实这个并不难理解&#xff0c;大白话讲就是&#xff1a;工厂活多了一个人撑不住&#xff0c;那就多找些工人一起干&#xff0c;要让这么多人为了一个目标干得快干得好&#xff0c;就需要一些规…

自主可控智能网联汽车操作系统

开发自主可控智能网联汽车操作系统的必要性 当下&#xff0c;传统汽车操作系统行业的核心技术几乎由国外的黑莓、谷歌、风河、Vector、ETAS等垄断。操作系统已成为我国智能网联汽车发展过程中的关键卡脖子技术&#xff0c;开发自主可控的智能网联汽车操作系统势在必行。 操作…

CVPR 2023 | 达摩院REALY头部重建榜单冠军模型HRN解读

团队模型、论文、博文、直播合集&#xff0c;点击此处浏览 前言 高保真 3D 头部重建在许多场景中都有广泛的应用&#xff0c;例如 AR/VR、医疗、电影制作等。尽管大量的工作已经使用 LightStage 等专业硬件实现了出色的重建效果&#xff0c;从单一或稀疏视角的单目图像估计高精…

微服务架构设计与实践

随着互联网的发展&#xff0c;软件开发已经成为各种企业发展的重要手段。然而&#xff0c;单体应用在长时间的维护中会变得复杂、难以扩展、难以修改。因此&#xff0c;为了满足业务需求&#xff0c;微服务架构应运而生。本篇文章将深入探讨微服务架构的设计与实践。 一、微服务…

C++中的类与对象

类与对象 我们在C语言中自定义的struct 叫做结构体&#xff0c;而在C中我们把struct升级为了类&#xff0c;并且还加入了一个class&#xff0c;也称为类&#xff0c;那么我们今天就来看一下结构体和类的不同和相同 1.结构体与类 我们在C语言中的结构体是struct&#xff0c;而…

QT学习笔记(持续更新)

QT 一、按钮 1.效果 2.代码 #include<QPushButton>//头文件myWidget::myWidget(QWidget *parent): QWidget(parent) {//方法1QPushButton *btnnew QPushButton;//btn->show();//以顶层方式显示btn->setParent(this);//在myWidget窗口中btn->setText("按钮…

JS编程中的API hook

JavaScript奇技淫巧&#xff1a;Hook与反Hook 作者&#xff1a;专注于JS混淆加密的 JShaman API HOOK技术&#xff0c;在PC时代曾盛行&#xff0c;是高端的技术。在JavaScript编程中&#xff0c;也可以应用API Hook技术实现不寻常的效果。 例&#xff0c;eval hook&#xff1a…

Kotlin 基础 笔记

这里写目录标题 变量函数条件语句if/else 语句when 语句if/else 表达式 和 when 表达式 Kotlin 中的null使用 ?: Elvis 运算符 类和对象构造函数类之间的关系可见性修饰符定义属性委托 变量 变量是存储单项数据的容器&#xff0c;必须先声明变量&#xff0c;才可以使用。 常见…

Centos7.5 如何安装Bacula 11.05详细教程

环境: 本地华为桌面云服务器环境 Centos 7.5 Bacula 11.05 问题描述: Centos7.5 如何安装Bacula 解决方案: 一、官网下载Bacula 1.下载Source Files11.0.5 2.先安装C 和 C++ 编译器 root@localhost ~]# yum install -y gcc gcc-c++ 1 已安装: 2 gcc.x86_64 0:…

梦想云图Node.JS服务(2023.4.19)

说明 后台提供梦想Node.JS服务&#xff0c;方便调用控件后台功能&#xff0c;Windows服务程序所在目录:Bin\MxDrawServer\Windows&#xff0c;Linux服务程序所在目录:Bin\Linux\MxDrawServer 启动服务 Windows:进入Bin\MxDrawServer\Windows目录&#xff0c;运行start.bat启动…

redis原理及进化之路

Redis 的主从复制经历了多次演进&#xff0c;本文将从最基本的原理和实现讲起&#xff0c;并层层递进&#xff0c;逐步呈现 Redis 主从复制的演进历史。大家将了解到 Redis 主从复制的原理&#xff0c;以及各个改进版本解决了什么问题&#xff0c;并最终看清 Redis 7.0 主从复制…

vue+uniapp疫苗预约接种系统 微信小程序

统计分析&#xff1a;查看用户&#xff0c;疫苗&#xff0c;订单数量&#xff1b;统计近7日&#xff0c;30日订单趋势 用户管理&#xff1a;查看注册用户信息&#xff0c;及删除&#xff08;数据库mysql) 疫苗管理&#xff1a;疫苗增删改查以及上下架 接种点管理&#xff1a;接…

vue3.0 详细说明+案例 !!!

提示&#xff1a;vue3.0 文章目录 前言一、pandas是什么&#xff1f;二、使用步骤 1.引入库2.读入数据总结 前言 提示&#xff1a;Vuee.js的最新版本。它提供了一系列全新的特性&#xff0c;包括更快的渲染速度、更好的Tree Shaking支持以及更好的TypeScript支持。 最重要的特性…

centos7重启后/etc/rc.local中的脚本没有执行

前阵子自己安装了WMware16、centos7&#xff0c;配置好jdk、mysql、nginx、redis并设置好开机自动启动后&#xff0c;打算将服务也做成自启动&#xff0c;因为之前做过本以为会很顺利&#xff0c;结果整了快两小时&#xff0c;觉得有必要记录下。 之前自己记录的博客&#xff…

Faster RCNN系列5——RoI Pooling与全连接层

Faster RCNN系列&#xff1a; Faster RCNN系列1——Anchor生成过程 Faster RCNN系列2——RPN的真值与预测值概述 Faster RCNN系列3——RPN的真值详解与损失值计算 Faster RCNN系列4——生成Proposal与RoI Faster RCNN系列5——RoI Pooling与全连接层 在RPN网络中&#xff0c;已…

融云出海赋能会干货回顾(二)| 地区、赛道选择和避坑攻略

“出海是这个时代给我们的机遇。”这是很多互联网出海人的心声。关注【融云全球互联网通信云】了解更多 走过跌宕起伏的 15 年出海历程&#xff0c;中国出海人现在面对与此前截然不同的市场环境&#xff0c;很多地区蓝海不再&#xff0c;也有不少赛道变得拥挤。 一体两面&…

交友项目【动态点赞动态喜欢】

目录 1&#xff1a;点赞 1.1&#xff1a;动态点赞 1.1.1&#xff1a;分析&实现 1.2&#xff1a;取消点赞 1.2.1&#xff1a;分析&实现 2&#xff1a;喜欢 2.1&#xff1a;动态喜欢 2.1.1&#xff1a;分析&实现 2.2&#xff1a;取消喜欢 2.2.2&#xff1a…

学成在线笔记+踩坑(5)——【媒资模块】上传视频,断点续传

目录 5 上传视频 5.1 媒资管理页面上传视频流程预览 5.2 断点续传技术 5.2.1 什么是断点续传 5.2.2 测试分块与合并&#xff0c;RandomAccessFile随机流 5.2.3 视频上传流程 5.2.4 测试minio合并文件 5.3 接口定义&#xff0c;检查文件/分块、上传分块、合并分块 5.4…

4年外包终上岸,我只能说这类公司能不去就不去

我大学学的是计算机专业&#xff0c;毕业的时候&#xff0c;对于找工作比较迷茫&#xff0c;也不知道当时怎么想的&#xff0c;一头就扎进了一家外包公司&#xff0c;一干就是4年。现在终于跳槽到了互联网公司了&#xff0c;我想说的是&#xff0c;但凡有点机会&#xff0c;千万…