问题描述:
Excel不支持foreach模板文件中的图片。(注:不懂加我QQ哦,QQ:1135242369)
适用情况:
随foreach中 List对象的Size添加的图片个数。
解决办法:
Excel不支持foreach模板文件中的图片。(注:不懂加我QQ哦,QQ:1135242369)
适用情况:
随foreach中 List对象的Size添加的图片个数。
解决办法:
在Java 程序里加入该图片,以便foreach。
方法一:
①将所要下载的图片放入Tomcat根目录
例:D:\apache-tomcat-7.0.56\nsj_logo.png
②在程序中加入以下代码
String fileName="nsj_logo.png";
File logoFile= new File(logo_path_2);
if (!logoFile_2.exists()) {
logo_path_2 = "";
}
//我存储数据的类型List<Map<String,Object>>
map.put("pic_path", logoFile);
在Excel文件中:
加入图片的格栅#picture(${detail.pic_path!} cell=7 row=4)
解释:
detail:在我做的项目中,一条记录就是一页,detail指当前对象
pic_path:在后台中设置的map key值
cell、row:图片的宽和高;
方法二:
思想:在程序内部以流的方式将图片写入Excel文件。
实现:
Workbook wb =null;
//获取数据部分的代码省略
wb = template.process(fileInputStream, "处理后的数据");
Sheet sheet = wb.getSheet("Sheet 名");
Drawing pr = sheet.createDrawingPatriarch();
BufferedImage bufferImg = null;
byte[] logo_image = null;
int top_row=19;
int column=24;
//每隔51行加入一张图片
int page_row = 51;
//Begin
//context 是指ServletContext,获得Servlet的上下文信息
bufferImg = ImageIO.read(new File(context.getRealPath("fileName")));
ByteArrayOutputStream byteArrayOut = new ByteArrayOutputStream();
BufferedImage setImgSize=new BufferedImage(93, 58, BufferedImage.TYPE_INT_RGB);
setImgSize.getGraphics().drawImage(bufferImg, 0, 0,93, 58, null);
ImageIO.write(setImgSize, "png", byteArrayOut);
logo_image=byteArrayOut.toByteArray();
if (pr != null && barcode_image != null && barcode_image.length > 0) {
//在我做的项目中当前代码(从Start到End)都是放置在一个for循环里,每循环一次就增加一个图片,而不是直接将图片写入文件内
AbsPoiUtil.addPicture(wb, pr, sheet, top_row, column, logo_image, HSSFWorkbook.PICTURE_TYPE_PNG, 4, 3f);
}
top_row+=page_row;
//End
总结:个人感觉是方法一简单,不需要设置太多,但是需要将图片放到服务器的根目录下。方法二?项目经理就说了一句:“没这么夸张吧”。哈哈哈