很多人不怎么用Excel中的批注,所以我特地截了张图,我们先看一下批注的效果图
批注主要有三个属性需要设置,一个是批注的位置和大小、一个是批注的文本、还有一个是批注的作者,
批注的位置和大小,在Excel中是与单元格密切相关的,NPOI中通过HSSFClientAnchor或者XSSFClientAnchor的实例来表示,它的构造函数比较复杂,有8个参数,它们分别是
参数 | 说明 |
dx1 | 第1个单元格中x轴的偏移量 |
dy1 | 第1个单元格中y轴的偏移量 |
dx2 | 第2个单元格中x轴的偏移量 |
dy2 | 第2个单元格中y轴的偏移量 |
col1 | 第1个单元格的列号 |
row1 | 第1个单元格的行号 |
col2 | 第2个单元格的列号 |
row2 | 第2个单元格的行号 |
例如,如果我们打算让注释显示在B3和E5之间,就应该这么写:
HSSFPatriarchpatr = sheet.CreateDrawingPatriarch();
HSSFCommentcomment1 = patr.CreateComment(new HSSFClientAnchor(0, 0, 0, 0, 1, 2 , 4, 4));
下面我们设置这个批注的内容和作者,这个比较简单:
comment1.String=newHSSFRichTextString(“Hello World”);
comment1.Author=“PushSoft”;
对于批注,你有两种选择,一种是隐藏(默认),一种是显示(即表单一打开就显示该批注),可以通过comment1.Visible属性来控制。
下面是创建了一个批注,在指定单元格的右侧的位置显示,为了避免在创建Excel文件时创建过多的字体对象,所以对于字体样式相同的单元格尽量使用一个对象来设置字体样式
private IComment GetComment(ISheet sheet, IComment comment, int cellnum,object text)
{
IWorkbook workbook = sheet.Workbook;
bool exportXlsx = workbook is XSSFWorkbook;
if (comment == null)
{
IDrawing draw = sheet.CreateDrawingPatriarch();
IClientAnchor clientAnchor = null;
if (exportXlsx)
{
clientAnchor = new XSSFClientAnchor(0, 0, 0, 0, cellnum, 0, cellnum +2, 5);
}
else
{
clientAnchor = new HSSFClientAnchor(0, 0, 0, 0, cellnum, 0, cellnum + 2, 5);
}
comment = draw.CreateCellComment(clientAnchor);
}
IRichTextString richText = null;
if (exportXlsx)
{
richText = new XSSFRichTextString(string.Format("{0}", text));
}
else
{
richText = new HSSFRichTextString(string.Format("{0}", text));
}
richText.ApplyFont(GetDefaultFont(workbook, true));// 设置批注中文本的字体
comment.String = richText;
comment.Visible = false;
comment.Author = "Pushsoft";
return comment;
}
private IFont _defaultFont;
private IFont _defaultBlodFont ;
private IFont GetDefaultFont(IWorkbook workbook, bool blod = false)
{
IFont font = blod? _defaultBlodFont :_defaultFont;
if (font == null)
{
font = workbook.CreateFont();
font.FontName = "Tahoma";
font.FontHeightInPoints = 9;
if (blod)
{
font.Boldweight = (short)FontBoldWeight.Bold;
_defaultBlodFont = font;
}
else
{
_defaultFont = font;
}
}
return font;
}