poi关于为excle文件添加批注被覆盖问题

POI 批注添加 注意事项

在使用POI上传Excel时,对上传的Excel内容进行校验时,错误信息背景加红,并且加批注
/**
* 功能:对校验的excel表的出错的地方背景变红,并且添加备注
* @param hssfWorkbook
* @param sheet所操作的excel表
* @param cell所校验的单元格
* @param msg准备添加的批注信息
* @param r 当前所操作的行
* @param allrow 是这个sheet表一共有几行
* @param 保存路径
*/
private void addAnnotateForExcel(HSSFWorkbook hssfWorkbook,HSSFSheet sheet,HSSFCell cell,HSSFPatriarch p,String msg,String savePath,int r,int allrow){
//为单元格添加批注
HSSFComment comment=
p.createComment(newHSSFClientAnchor(0,0,0,0,(short)3,3,(short)5,6));
comment.setString(new HSSFRichTextString(msg));
cell.setCellComment(comment);
//设置背景颜色
HSSFCellStyle style=hssfWorkbook.createCellStyle();
style.setFillPattern(HSSFCellStyle.FINE_DOTS );
//设置前景色
style.setFillForegroundColor(new HSSFColor.RED().getIndex());
//设置背景色
style.setFillBackgroundColor(new HSSFColor.RED().getIndex());
//给单元格添加风格
cell.setCellStyle(style);
if (r==(allrow-1)) {
FileOutputStream stream =null;
try {
stream = new FileOutputStream(savePath);
hssfWorkbook.write(stream);
} catch (Exception e) {
e.printStackTrace();
}finally{
if (stream!=null) {
try {
stream.close();
} catch (IOException e) {
e.printStackTrace();
}}}}
}

注:
1.一张sheet表,只能创建一个绘画对象HSSFPatriarch,如果一张表创建多个绘画对象HSSFPatriarch,在添加批注时,会出现错误,会导致只有最后一行添加了批注
2. HSSFWorkbook 这种创建的工作表,只能对第一张工作表操作
3.在输出过程中,不能添加一次输出一次,必须要等到对最后一行数据校验完毕后才能输出,否则会覆盖点之前的批注或者只能在第一个上添加批注
4,前景色和背景色要配合着使用,否则无法实现背景加色的效果

你可能感兴趣的:(java)