C# npoi不在合并单元格附近添加单元格

C# npoi不在合并单元格附近添加单元格,c#,excel,apache-poi,npoi,C#,Excel,Apache Poi,Npoi,您好,我使用npoi(ApachePOI到.NET的端口)制作了许多报告 我需要做一个像这样的Excel 其中x1,x2,x3。。动态添加到第15行级别| Name | CT | CH | C中,并对每个项目重复 我有这个密码 int nrow = 13; row = (HSSFRow)sheet.CreateRow(nrow); rowBottom = (HSSFRow)sheet.CreateRow(nrow + 1); ncol = 0; foreach (Plan plan in p

您好,我使用npoi(ApachePOI到.NET的端口)制作了许多报告

我需要做一个像这样的Excel

其中x1,x2,x3。。动态添加到第15行
级别| Name | CT | CH | C
中,并对每个项目重复

我有这个密码

int nrow = 13;

row = (HSSFRow)sheet.CreateRow(nrow);
rowBottom = (HSSFRow)sheet.CreateRow(nrow + 1);
ncol = 0;

foreach (Plan plan in planesUltimos) {

    var i = ncol + 1;

    cell = (HSSFCell)rowBottom.CreateCell(i++);
    cell.SetCellValue("Level");    

    cell = (HSSFCell)rowBottom.CreateCell(i++);
    cell.SetCellValue("Name");

    cell = (HSSFCell)rowBottom.CreateCell(i++);
    cell.SetCellValue("CT");

    cell = (HSSFCell)rowBottom.CreateCell(i++);
    cell.SetCellValue("CH");

    cell = (HSSFCell)rowBottom.CreateCell(i);
    cell.SetCellValue("C");

    var cellRange=  new CellRangeAddress(nrow, nrow, ncol + 1, ncol + 5);

    sheet.AddMergedRegion(cellRange);

    HSSFRegionUtil.SetBorderBottom(NPOI.SS.UserModel.BorderStyle.Medium, cellRange, sheet, wb);
    HSSFRegionUtil.SetBorderTop(NPOI.SS.UserModel.BorderStyle.Medium, cellRange, sheet, wb);
    HSSFRegionUtil.SetBorderRight(NPOI.SS.UserModel.BorderStyle.Medium, cellRange, sheet, wb);
    HSSFRegionUtil.SetBorderLeft(NPOI.SS.UserModel.BorderStyle.Medium, cellRange, sheet, wb);


    cell = (HSSFCell)row.CreateCell(ncol + 1);
    cell.SetCellValue(plan.nombre);    

    ncol += 5;
}
但我明白了

如图所示:

  • 每个区域的第一个单元格不显示边框
  • 第二排底部未显示
我做了个测试

更改行底

rowBottom = (HSSFRow)sheet.CreateRow(nrow + 1);

rowBottom现在在报告中

但我需要一起

不,我做错了,还有一个问题,在Excel中,当更改一行中的标记时,这些丢失边界

编辑

我评论

//cell = (HSSFCell)row.CreateCell(ncol + 1);
//cell.SetCellValue(plan.nombre);  
并使用
rowBottom=(HSSFRow)sheet.CreateRow(nrow+1)对其进行tun


范围有很好的边界,但仍然缺少最下面的一行

我建议您去掉
CreateRow
CreateCell
,因为这些方法会添加新的范围。您的目标是对现有单元格/行执行过程。我不知道NPOI中的哪个命令将现有范围设置为变量,但我看到您成功地使用了
CellRangeAddress
。关于第二行没有寄宿生,我看到
var cellRange=newcellRangeAddress(nrow,nrow,ncol+1,ncol+5)
只有一行,这就是为什么没有得到边界。
//cell = (HSSFCell)row.CreateCell(ncol + 1);
//cell.SetCellValue(plan.nombre);