這個問題在網上搜,都是說如下即可:
//添加批注
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),這會坑死的。