这个问题在网上搜,都是说如下即可:
//添加批注
HSSFPatriarch patr = (HSSFPatriarch)sheet.CreateDrawingPatriarch();
HSSFComment comment12 = patr.CreateComment(new HSSFClientAnchor(0, 0, 0, 0, 1, 2, 2, 3));//批注显示定位
comment12.String = new HSSFRichTextString("请填写完整部门名称!");
HSSFCell cell12 = (HSSFCell)headerRow.CreateCell(12);//将批注给予单元格
cell12.CellComment = comment12;
但是有个比较重要的地方需要澄清下,就是批注的位置和大小,这是由HSSFClientAnchor八个参数控制的,千万不能简单的写HSSFClientAnchor(0, 0, 0, 0, 1, 2, 2, 3),
因为每个单元格的批注的位置都是不一样的(编辑批注时的位置)。那么怎么办呢,当然是需要了解参数的意思:
https://www.cnblogs.com/firstcsharp/p/4896121.html 这个网址下说的很好,大家可以看下,简单说来:
关于HSSFClientAnchor(dx1,dy1,dx2,dy2,col1,row1,col2,row2)的参数,有必要在这里说明一下:
dx1:起始单元格的x偏移量;
dy1:起始单元格的y偏移量;
dx2:终止单元格的x偏移量;
dy2:终止单元格的y偏移量;
col1:起始单元格列序号;
row1:起始单元格行序号;
col2:终止单元格列序号;
row2:终止单元格行序号;
其实主要是前四个是偏移量,后四个关系到批注的位置和大小。
以我自己做的一个例子来说:
HSSFComment comment1 = (HSSFComment)patr.CreateCellComment(new HSSFClientAnchor(255, 125, 1023, 150, colindex + 1, rowIndex - 1, colindex + 2, rowIndex + 4));
后四个参数的解释是:
rowIndex 是当前单元格是第几行,colindex 是当前单元格是第几列。通过行列是可以定位到当前的单元格的。
colindex + 1 对应上面的参数是col1 表示批注起始的位置是当前单元格的列数的下一列,即原来是第5列,则批注起在第6列。
rowIndex - 1 对应上面的参数是row1 表示皮质起始的位置是当前单元格行数的上一行,即原来是第2行,则批注起在第1行。
colindex + 2, rowIndex + 4 这两个参数则是单元格终止的位置 +2 +4 则是决定了批注的大小,道理同colindex + 1,rowIndex - 1 。
但是NPOI导出有个坑 就是批注大小会随着所在位置的单元格大小变动 这个影响不大 如果想解决这个问题 只能换导出方法了。。。
千万别按照网上人家写的(0, 0, 0, 0, 1, 2, 2, 3),这会坑死的。