我用POI创建2007格式的EXCEL,写入批注,打开后能看到单元格内容和批注的标识,但是批注内容为空,不知道为什么,求高人指点。
代码如下(POI版本3.8~3.10都能运行):
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 | package javatest; import java.io.FileOutputStream; import java.io.IOException; import org.apache.poi.xssf.usermodel.XSSFCell; import org.apache.poi.xssf.usermodel.XSSFClientAnchor; import org.apache.poi.xssf.usermodel.XSSFComment; import org.apache.poi.xssf.usermodel.XSSFDrawing; import org.apache.poi.xssf.usermodel.XSSFRichTextString; import org.apache.poi.xssf.usermodel.XSSFSheet; import org.apache.poi.xssf.usermodel.XSSFWorkbook; public class PoiWriter { public static void main(String[] args) throws IOException { // 创建工作簿对象 XSSFWorkbook wb = new XSSFWorkbook(); // 创建工作表对象 XSSFSheet sheet = wb.createSheet( "我的工作表" ); // 创建绘图对象 XSSFDrawing p = sheet.createDrawingPatriarch(); // 创建单元格对象,批注插入到4行,1列,B5单元格 XSSFCell cell = sheet.createRow( 4 ).createCell( 1 ); // 插入单元格内容 cell.setCellValue( new XSSFRichTextString( "批注" )); // 获取批注对象 // (int dx1, int dy1, int dx2, int dy2, short col1, int row1, short // col2, int row2) // 前四个参数是坐标点,后四个参数是编辑和显示批注时的大小. XSSFComment comment = p.createCellComment( new XSSFClientAnchor( 0 , 0 , 0 , 0 , ( short ) 3 , 3 , ( short ) 5 , 6 )); // 输入批注信息 comment.setString( new XSSFRichTextString( "这是批注内容!" )); // 添加作者,选中B5单元格,看状态栏 comment.setAuthor( "toad" ); // 将批注添加到单元格对象中 cell.setCellComment(comment); // 创建输出流 FileOutputStream out = new FileOutputStream( "d:/writerPostil.xlsx" ); wb.write(out); // 关闭流对象 out.close(); } }
|
问题已经解决,这段代码生成的Excel在Office 2007及以上版本中是正常的,只是在WPS中批注无法显示出来。解决办法是为批注内容添加字体设置,代码如下:
1 2 3 4 | XSSFRichTextString rtf = new XSSFRichTextString( "批注内容" ); XSSFFont commentFormatter = wb.createFont(); rtf.applyFont(commentFormatter); comment.setString(rtf); |
联系客服