• NPOI 导出添加批注功能


    这个问题在网上搜,都是说如下即可:

    //添加批注
    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),这会坑死的。

  • 相关阅读:
    如何让在JAVA中定义常量池
    java常量池概念
    Efficient Counter in Java
    看到关于JS线程的两篇文章
    Java Collection
    java学习书籍介绍--csdn上一位前辈介绍
    myeclipse快捷键
    数组
    错误处理和时间函数
    函数01
  • 原文地址:https://www.cnblogs.com/zhuangjolon/p/9300704.html
Copyright © 2020-2023  润新知