easyExcel导出图片

本文介绍了如何在Java代码中使用EasyExcel库处理Excel导出,关注于如何在导出的Excel文件中包含图片,支持本地服务器、云服务器等多种图片来源,并详细展示了如何设置字段宽度和使用StringImageConverter进行图片转换。
摘要由CSDN通过智能技术生成

有的时候,导出的excel文件中会带有图片,可能是项目内置的,可能是在本地服务器存放的,也可能是在云服务器上,如何在导出Excel时兼容这几种情况呢?

实体类 

package com.minghe.jiaozhu.model.dto;
 
import com.alibaba.excel.annotation.ExcelProperty;
import com.alibaba.excel.annotation.write.style.ColumnWidth;
import com.alibaba.excel.annotation.write.style.ContentRowHeight;
import com.alibaba.excel.annotation.write.style.ContentStyle;
import com.alibaba.excel.annotation.write.style.HeadRowHeight;
import com.alibaba.excel.converters.string.StringImageConverter;
import com.alibaba.excel.enums.BooleanEnum;
import com.alibaba.excel.enums.poi.BorderStyleEnum;
import com.alibaba.excel.enums.poi.VerticalAlignmentEnum;
import lombok.Data;
 
@Data
@HeadRowHeight(30)//设置表头的行高度
@ContentRowHeight(60)//设置单元格的高度
@ColumnWidth(100 / 8)
//属性注释在最下
@ContentStyle(wrapped = BooleanEnum.TRUE, verticalAlignment = VerticalAlignmentEnum.CENTER, borderBottom = BorderStyleEnum.THIN, borderLeft = BorderStyleEnum.THIN, borderRight = BorderStyleEnum.THIN, borderTop = BorderStyleEnum.THIN)
public class ExportHeadersValueImageExcel {
//cellWritervalue对应ValueCellWriteHandler里的cellWritervalue
    /**
     * 金
     */
    @ExcelProperty(value = {"七灵图","总纲","五行", "金"})
    private String jin;
    /**
     * 木
     */
    @ExcelProperty(value = {"七灵图","${cellWriterValue}","五行", "木"})
    private String mu;
    /**
     * 水
     */
    @ExcelProperty(value = {"七灵图","${cellWriterValue}","五行", "水"})
    private String shui;
    /**
     * 火
     */
    @ExcelProperty(value = {"七灵图","${cellWriterValue}","五行", "火"})
    private String huo;
    /**
     * 土
     */
    @ExcelProperty(value = {"七灵图","${cellWriterValue}","五行", "土"})
    private String tu;
    /**
     * 阴
     */
    @ExcelProperty(value = {"七灵图","${cellWriterValue}","两仪", "阴"})
    private String yin;
    /**
     * 阳
     */
    @ExcelProperty(value = {"七灵图","${cellWriterValue}","两仪", "阳"})
    private String yang;
    /**
     * 如果图片用string类型 必须指定转换器,string默认转换成string
     */
    @ExcelProperty(value = {"七灵图","${cellWriterValue}", "两仪","灵图"},converter = StringImageConverter.class)
    @ColumnWidth(30)//图片的列宽单独设置
    private String imagePath;
    //有五种写入图片的方式,url是写图片的地址.测试中发现InputStream转换有问题 实际应用中可以看看具体什么问题
    /*    private File file;
    private InputStream inputStream;
    private String string;
    private byte[] byteArray;
    private URL url;*/
 
}

代码

    public void exportHeadersValueImage(String path) {

        String sheetName = "sheetName";
        String imagePath = "D:\\test\\miao.jpg";
        List<ExportHeadersValueImageExcel> excels = new ArrayList<>();
        ExportHeadersValueImageExcel imageExcel = new ExportHeadersValueImageExcel();
        imageExcel.setJin("10");
        imageExcel.setMu("2.00");
        imageExcel.setShui("3.00");
        imageExcel.setHuo("4.00");
        imageExcel.setTu("5.00");
        imageExcel.setYin("6.00");
        imageExcel.setYang("7.01");
        imageExcel.setImagePath(imagePath);
        excels.add(imageExcel);
        EasyExcel.write(path, ExportHeadersValueImageExcel.class)
                .sheet(sheetName).doWrite(excels);
    }

效果

实体类中,字段上可以加注解@ColumnWidth(30)来单独设置该字段的列宽,@ExcelProperty注解上要指定converter       @ExcelProperty(value = {"七灵图", "两仪","灵图"},converter = StringImageConverter.class)

图片的方式有五种,文件,文件流,string(我理解为path),字节流,url(适用于图片在云端存储的)

/*    private File file;
private InputStream inputStream;
private String string;
private byte[] byteArray;
private URL url;*/

 git仓库:导入导出: 导入导出的实例

更多导出场景:多场景easyExcel导出excel文件(一)-CSDN博客

读取excel场景:多场景easyExcel读取excel文件(二)-CSDN博客

根据模板填充excel:多场景easyExcel根据模板填充excel文件(三)-CSDN博客

  • 17
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
可以使用EasyExcel中的Write方法和Image对象来实现带图片Excel导出。具体步骤如下: 1. 在需要导出图片的地方,插入图片,并获取图片的宽度和高度。 2. 在对应的Excel单元格中,插入图片,并设置图片的大小。 3. 使用EasyExcel的Write方法,将数据写入Excel,并将图片添加到对应的单元格中。 以下是一个示例代码: ```java // 创建ExcelWriter对象 ExcelWriter writer = EasyExcel.write(fileName).build(); // 创建Sheet对象 Sheet sheet = new Sheet(1, 0); // 设置表头 List<List<String>> head = Arrays.asList(Arrays.asList("姓名", "照片")); sheet.setHead(head); // 设置数据 List<List<Object>> data = new ArrayList<>(); List<Object> rowData = new ArrayList<>(); rowData.add("张三"); // 插入图片,并获取图片的宽度和高度 InputStream inputStream = new FileInputStream("图片路径"); byte[] bytes = IOUtils.toByteArray(inputStream); inputStream.close(); Image image = new Image(); image.setByteArray(bytes); image.setType(ImageType.PNG); image.setCol(1); image.setRow(1); image.setWidth(100); image.setHeight(100); // 将图片添加到对应的单元格中 sheet.addImage(image); rowData.add(image); data.add(rowData); // 写入数据 writer.write0(data, sheet); // 关闭ExcelWriter对象 writer.finish(); ``` 在上面的示例代码中,我们首先创建了一个ExcelWriter对象,并设置了Sheet对象和表头。然后,我们插入了一张图片,并获取了图片的宽度和高度。接着,我们将图片添加到对应的单元格中,并将数据写入Excel中。最后,我们关闭了ExcelWriter对象,完成了Excel导出。 需要注意的是,上面的示例代码中,我们使用了IOUtils.toByteArray()方法将图片转换成了字节数组,这可能会导致内存占用较大。如果需要导出大量图片,建议使用更加高效的图片处理方式。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值