概述
客户提个需求,需要将报表导出 excel带水印 和 pdf带水印 2个版本.
做的时候连excel本身怎么带水印都不知道,更不用说用java了.后来在网上搜到了excel添加水印的2个方法.
1.艺术字; 2页眉. 因为报表页数不固定,所以决定使用页眉插入图片来做.(POI可以插入页眉,但是没找到用图片做页眉怎么操作)
最早想的是做个带页眉的模版出来,导出的时候使用这个模版.结果使用jxl来做,模版中的页眉或者艺术字总是带不出来.
后来使用poi试了下,可以. 说以决定时候poi, 而且里面一些单元格格式也比较复杂.poi能更好的解决.
下面的一些代码,主要是格式的.记录下来,也方便查看.
1.先使用模版创建一个文件
File file = new File("D://target.xls");//目标文件
String templatePath = "D://template.xls";//模版文件
POIFSFileSystem fs=new POIFSFileSystem(new FileInputStream(templatePath));
HSSFWorkbook workbook = new HSSFWorkbook(fs);
HSSFSheet sheet = workbook.getSheetAt(0);
FileOutputStream out = new FileOutputStream(file);
workbook.setSheetName(0, "test");//sheet名称
2. 具体的一些样式
HSSFFont fontContent4 = workbook.createFont(); // 生成一个字体
fontContent4.setFontHeightInPoints((short) 11);//字体大小
fontContent4.setBoldweight(HSSFFont.BOLDWEIGHT_BOLD);//字体加粗
fontContent4.setFontName("仿宋_GB2312");
HSSFCellStyle styleContent4 = workbook.createCellStyle();
styleContent4.setFont(fontContent4);
styleContent4.setAlignment(HSSFCellStyle.ALIGN_CENTER);//水平居中
styleContent4.setVerticalAlignment(HSSFCellStyle.VERTICAL_CENTER);//垂直居中
styleContent4.setWrapText(true);//自动换行
styleContent4.setBorderBottom(HSSFCellStyle.BORDER_THIN);//边框 4个边都要设置
styleContent4.setBorderLeft(HSSFCellStyle.BORDER_THIN);
styleContent4.setBorderRight(HSSFCellStyle.BORDER_THIN);
styleContent4.setBorderTop(HSSFCellStyle.BORDER_THIN);
3.给单元个设置样式
//设置默认列宽和列宽
sheet.setDefaultColumnWidth(5);
sheet.setDefaultRowHeight((short) 500);
HSSFRow row6 = sheet.createRow(startRow);
HSSFCell r6c0 = row6.createCell(0);
r6c0.setCellValue(new HSSFRichTextString("平均分"));
r6c0.setCellStyle(styleContent4);
row6.createCell(1).setCellStyle(styleContent4);//空的单元格也设置格式
row6.createCell(2).setCellStyle(styleContent4);//空的单元格也设置格式
sheet.addMergedRegion(new CellRangeAddress(0,1,0,2));//合并单元格(起始行,结束行,起始列,结束列)
//同一个单元格设置不同字体
HSSFRichTextString advise = new HSSFRichTextString(report.getAdvise());
advise.applyFont(0, 9, fontContent3);
advise.applyFont(9, 16, fontTitle3);
advise.applyFont(16, advise.length(),fontContent3);
r6c1.setCellValue(advise);//
r6c1.setCellStyle(styleContent3);
4.总结: 感觉POI功能非常强大,功能强大必然带来使用上的复杂化.
每个单元格因为都要设置样式和值,所以要用个对象来接收, 而不能每次都createCell和createRow.
边框也需要四个方向都设置等等.
也可能是有简便的方式我不知道,有知道的可以分享一下,谢谢!
最后
以上就是傲娇冰棍为你收集整理的POI导出EXCEL带水印,以及单元格格式设置的全部内容,希望文章能够帮你解决POI导出EXCEL带水印,以及单元格格式设置所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复