excel导出图片设置

时间:2024-03-02 20:03:54
示例代码
XSSFDrawing patriarch = sheet.createDrawingPatriarch();
XSSFClientAnchor xssfClientAnchor = patriarch.createAnchor(
XSSFShape.EMU_PER_PIXEL * 17,
XSSFShape.EMU_PER_PIXEL * 17,
XSSFShape.EMU_PER_PIXEL * 100,
XSSFShape.EMU_PER_PIXEL * 100,
1, 4, (short) 3,4 );
xssfClientAnchor.setAnchorType(ClientAnchor.AnchorType.MOVE_AND_RESIZE);//设置图片随单元移动调整大小
patriarch.createPicture(xssfClientAnchor, workbook.addPicture(
InputStreamUtil.getImageBytes("https://www.epandian.cn/img/asset/asset_photo/201910/1571714809486c9457.jpg"), XSSFWorkbook.PICTURE_TYPE_JPEG));
注意项:
最开始以为XSSFClientAnchor 无参构造不能生效手动set了属性,发现一直不生效,难受!!!
最后终于发现,注意:
在指定的锚点位置上创建一个图形,注意:XSSFClientAnchor的dx1、dy1、dx2、dy2定义与HSSF不同,不再是0-1023、0-255的相对比率,而是一个固定单位的绝对定位,通常使用XSSFShape.EMU_PER_POINT(折合成1点)和XSSFShape.EMU_PER_PIXEL(折合成1像素)做为单位乘以1个值来定位
在XSSFClientAnchor 中如果你一直使用定值会发现各种调就是绝对必须不生效,所以划重点,必须使用XSSFShape属性来定位;
其次:
xssfClientAnchor.setAnchorType(ClientAnchor.AnchorType.MOVE_AND_RESIZE);//设置图片随单元移动调整大小
这个属性也是必须的;
导出处理示例:
本地图片处理:
 ByteArrayOutputStream byteArrayOut = new ByteArrayOutputStream();     
            bufferImg = ImageIO.read(new File("F:/图片/照片/无名氏/小昭11.jpg"));     
            ImageIO.write(bufferImg, "jpg", byteArrayOut);  
            HSSFWorkbook wb = new HSSFWorkbook();     
            HSSFSheet sheet1 = wb.createSheet("test picture");    
            //画图的*管理器,一个sheet只能获取一个(一定要注意这点)  
            HSSFPatriarch patriarch = sheet1.createDrawingPatriarch();     
            //anchor主要用于设置图片的属性  
            HSSFClientAnchor anchor = new HSSFClientAnchor(0, 0, 255, 255,(short) 1, 1, (short) 5, 8);     
            anchor.setAnchorType(3);     
            //插入图片    
 patriarch.createPicture(anchor, wb.addPicture(byteArrayOut.toByteArray(), HSSFWorkbook.PICTURE_TYPE_JPEG)); 
服务端图片导出:
服务端导出需获取图片访问URL后获取导出资源,具体得包自己去百度下!