NPOI合并单元格后的边框设置

原创 2014年09月23日 14:43:26

通过NPOI将单元格B2-C3进行单元格合并,并添加边框。一开始我的写法是这样的:

        static void Main(string[] args)
        {
            HSSFWorkbook workbook = new HSSFWorkbook();
            HSSFSheet sheet = workbook.CreateSheet("Sheet1") as HSSFSheet;
            HSSFRow dataRow = sheet.CreateRow(1) as HSSFRow;
            dataRow = sheet.CreateRow(1) as HSSFRow;
            CellRangeAddress region = new CellRangeAddress(1, 2, 1, 2);
            sheet.AddMergedRegion(region);
            ICell cell = dataRow.CreateCell(1);
            cell.SetCellValue("test");

            ICellStyle style = workbook.CreateCellStyle();
            style.BorderBottom = BorderStyle.Thin;
            style.BorderLeft = BorderStyle.Thin;
            style.BorderRight = BorderStyle.Thin;
            style.BorderTop = BorderStyle.Thin;
            style.BottomBorderColor = HSSFColor.Black.Index;
            style.LeftBorderColor = HSSFColor.Black.Index;
            style.RightBorderColor = HSSFColor.Black.Index;
            style.TopBorderColor = HSSFColor.Black.Index;

            cell.CellStyle = style;


            using (MemoryStream ms = new MemoryStream())
            {
                workbook.Write(ms);
                ms.Flush();
                ms.Position = 0;
                using (FileStream fs = new FileStream("C:\\TestConsole.xls", FileMode.Create, FileAccess.Write))
                {
                    byte[] data = ms.ToArray();
                    fs.Write(data, 0, data.Length);
                    fs.Flush();
                }
            }
        }

但输出的结果却是这样的:



由此可见NPOI还是认为我Create的Cell是B2,但由于合并后,右侧和下部边框不存在了,产生了以上的结果。

我的解决方案是对合并区域的所有单元格遍历设置边框,代码如下

        static void Main(string[] args)
        {
            HSSFWorkbook workbook = new HSSFWorkbook();
            HSSFSheet sheet = workbook.CreateSheet("Sheet1") as HSSFSheet;
            HSSFRow dataRow = sheet.CreateRow(1) as HSSFRow;
            dataRow = sheet.CreateRow(1) as HSSFRow;
            CellRangeAddress region = new CellRangeAddress(1, 2, 1, 2);
            sheet.AddMergedRegion(region);
            ICell cell = dataRow.CreateCell(1);
            cell.SetCellValue("test");

            ICellStyle style = workbook.CreateCellStyle();
            style.BorderBottom = BorderStyle.Thin;
            style.BorderLeft = BorderStyle.Thin;
            style.BorderRight = BorderStyle.Thin;
            style.BorderTop = BorderStyle.Thin;
            style.BottomBorderColor = HSSFColor.Black.Index;
            style.LeftBorderColor = HSSFColor.Black.Index;
            style.RightBorderColor = HSSFColor.Black.Index;
            style.TopBorderColor = HSSFColor.Black.Index;

            //cell.CellStyle = style;
            for (int i = region.FirstRow; i <= region.LastRow; i++)
            {
                IRow row = HSSFCellUtil.GetRow(i, sheet);
                for (int j = region.FirstColumn; j <= region.LastColumn; j++)
                {
                    ICell singleCell = HSSFCellUtil.GetCell(row, (short)j);
                    singleCell.CellStyle = style;
                }
            }

            using (MemoryStream ms = new MemoryStream())
            {
                workbook.Write(ms);
                ms.Flush();
                ms.Position = 0;
                using (FileStream fs = new FileStream("C:\\TestConsole.xls", FileMode.Create, FileAccess.Write))
                {
                    byte[] data = ms.ToArray();
                    fs.Write(data, 0, data.Length);
                    fs.Flush();
                }
            }
        }


检查结果:


大功告成。




POI合并单元边框问题解决方法

public class POICellMergeDemo { public static void main(String[] args) throws Exception { HSSFWor...
  • hardworking0323
  • hardworking0323
  • 2016年04月09日 15:32
  • 5622

POI导出Excel合并单元格时的边框问题

在Excel中合并了单元格,仅使用的是下面的代码 CellRangeAddress cra = new CellRangeAddress(0, 0, 0, (rowName.length...
  • u014727260
  • u014727260
  • 2017年02月21日 00:14
  • 2049

使用poi导出excel,及合并单元格边框显示问题

使用poi导出excel,及合并单元格边框显示问题。
  • qq_22193397
  • qq_22193397
  • 2017年01月16日 11:07
  • 4597

NPOI2.2.0.0实例详解(六)—设置EXCEL单元格边框

设置EXCEL单元格边框
  • xxs77ch
  • xxs77ch
  • 2015年12月09日 09:49
  • 4035

【一步一步学NPOI】3.设置单元格宽高和边框

1.宽度 excel中,一列的单元格宽度是一样的,所以宽度操作的对象是sheet var cellDate = row1.CreateCell(0); cellDate....
  • aa2012123456
  • aa2012123456
  • 2016年02月03日 13:55
  • 5580

POI中设置Excel单元格格式样式(居中,字体,边框等)

创建sheet什么的就不多说了,直接进入正题 [java] view plaincopyprint? HSSFCellStyle cellStyle = wb.createCell...
  • spp_1987
  • spp_1987
  • 2013年10月31日 11:32
  • 69356

POI实现EXCEL单元格合并及边框样式

创建产生一个excel,合并单元格,然后为合并后的单元格添加边框 CellRangeAddress
  • sxdtwym
  • sxdtwym
  • 2017年01月12日 16:57
  • 7987

NPOI读取模板导出Excel(合并单元格)

  • 2012年04月18日 17:36
  • 20KB
  • 下载

NPOI,将单元格的值转换为字符串

NPOI,读取Excel单元格,返回字符串
  • cloudmonster
  • cloudmonster
  • 2016年03月17日 13:23
  • 1310

NPOI 2.0 教程(三):EXCEL 基本格式设置之ICellStyle

前两篇,我们已经学习了如何用NPOI来创建和编辑Excel,并且已经熟悉了HSSFWorkbook,ISheet,IRow和ICell。 接下来我们把它变得漂亮一点。...
  • fujie724
  • fujie724
  • 2014年12月10日 17:42
  • 24016
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:NPOI合并单元格后的边框设置
举报原因:
原因补充:

(最多只允许输入30个字)