Java使用POI解析带图片的excel,简洁好用

这篇具有很好参考价值的文章主要介绍了Java使用POI解析带图片的excel,简洁好用。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

一、场景

        这天遇到这个这样的需求,需要导入表格中的数据,还得支持带图片;这应该难不倒咱阿里的EasyExcel,打开官网文档一看哦豁,明确表示暂时不支持解析带图片的Excel......

poi读取excel中的图片,工具类,POI解析带图片表格,POI解析Excel,EasyExcel解析表格,java解析带图片表格,java解析excel

好了,这下只能看POI了,然后想起来项目里引入的HuTools工具类,它应该封装好了吧;于是决定用HuTools里面的ExcelUtil来实现!

二、秀个骚操作,使用EasyExcel+HuTools(POI)实现解析

说明:因为EasyExcel实在太好用了,加上看完HuTools工具类的方法发现,图片解析是单独的,所以决定使用EasyExcel来解析数据,用HuTools工具类来解析里面的图片;如果表格数据过大则谨慎使用笔者这种方式哦。

1、定义EasyExcel解析用到的与表格映射的JavaBean

/**
 * <p>
 * 任务表格映射
 * </p>
 *
 * @author kobe
 * @since 2023-03-04
 */
@Data
public class TaskExcelDto implements Serializable {

    private static final long serialVersionUID = 1L;

    //这个注解表示解析的时候忽略
    @ExcelIgnore
    private Long id;

    @ExcelProperty("姓名")
    private String name;

    @ExcelProperty("归属状态")
    private String status;

    @ExcelProperty("计划代码")
    private String planCode;

    @ExcelProperty("日期")
    private Date issueDate;

    @ExcelProperty("时间")
    private String time;

    @ExcelProperty("任务分类")
    private String types;

    @ExcelProperty("订单号")
    private String orderNum;

    @ExcelProperty("金额")
    private Double money;

    @ExcelProperty("提成")
    private Double divvy;

    @ExcelProperty("总金额")
    private Double totalMoney;

    @ExcelProperty("计划人")
    private String planer;

    @ExcelProperty("所设关键词")
    private String keywords;

    @ExcelIgnore
    private String picture;

    // 图片数据,临时变量
    @ExcelIgnore
    private PictureData pictureData;


}

2、实现代码

    @ApiOperation("excel导入")
    @PostMapping("v1/excel/import")
    public JsonResult importByExcel(MultipartFile file) throws IOException {
        List<TaskExcelDto> list = new ArrayList<>();
        // EasyExcel解析普通数据(这里为了演示简单写一下,实战建议写个实现类)
        EasyExcel.read(file.getInputStream(), TaskExcelDto.class, new AnalysisEventListener<TaskExcelDto>() {

            @Override
            public void invoke(TaskExcelDto data, AnalysisContext context) {
                list.add(data);
            }

            @Override
            public void doAfterAllAnalysed(AnalysisContext context) {

            }
        }).sheet().doRead();
        // 使用HuTools工具类解析表格的图片
        //注意这个方法只能读取浮动的图片,嵌入单元格的读取不到!
        //注意这个方法只能读取浮动的图片,嵌入单元格的读取不到!
        //注意这个方法只能读取浮动的图片,嵌入单元格的读取不到!
        ExcelReader reader = ExcelUtil.getReader(file.getInputStream());
        //key是图片位置,row_cell的格式;value是图片数据
        Map<String, PictureData> picMap = ExcelPicUtil.getPicMap(reader.getWorkbook(), 0);
        //这里只关心行数,把数据装到Bean里面去,也可用map在循环中取获取
        picMap.forEach((k, v) -> {
            String[] split = k.split(StrUtil.UNDERLINE);
            Integer index = Integer.valueOf(split[0]);
            list.get(index - 1).setPictureData(v);
        });

        //建议使用并行流上传图片,多线程加速
        list.stream().parallel().forEach(i -> {
            if (null == i.getPictureData()) {
                return;
            }
            String mimeType = i.getPictureData().getMimeType();
            String[] mimeTypes = mimeType.split(StrUtil.SLASH);
            try {
                String fileName =  UUID.randomUUID() + "." + mimeTypes[1];
                FileUploadResult fileUploadResult = super.uploadFile(i.getPictureData().getData(), fileName );
                i.setPicture(fileUploadResult != null ? fileUploadResult.getWebPath());
            } catch (IOException e) {
                log.error("file upload error, {}", JSONUtil.toJsonStr(i));
            }
        });
        // 调用业务代码保存数据
        service.importByExcel(list);
        return JsonResult.success();
    }

 3、注意:这个读取方法只能读取浮动的图片,嵌入单元格的读取不到!如果发现没读取到,检查一下Excel中图片在单元格中的样式,右击“切换为浮动图片”即可。文章来源地址https://www.toymoban.com/news/detail-515763.html

到了这里,关于Java使用POI解析带图片的excel,简洁好用的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • poi解析word和excel,并且获取其中文字、图片、音频和视频的位置

            最近在做一个项目,要求解析出来word和excel中的一些属性,开始没当回事,以为很简单,但是做着做着发现不对劲,国内好像没人会有这种需求,也是费了很多事时间才找到方法,分享出去让你们少走弯路,我也是个新手,勿喷。         当然是poi了,免费,文档全

    2024年02月07日
    浏览(34)
  • java解析excel,poi和easyExcel

    做项目遇到上传excel并解析excel内容组装成结构话json,网上查了很多方法,做了poi和easyExcel两个方法的对比 两者都可以解析excel文件,但是两个也有不同: 一、poi 官方说明:https://poi.apache.org/components/index.html A、03版excel和07版excel: 1)03版excel最多65536行,最大列数是256列,

    2023年04月22日
    浏览(33)
  • Java poi之Excel文本图片内容提取

    应公司需求,需实现以下功能 Excel文本内容的替换; Excel文本内容的提取; Excel中图片的提取存放 此文章将使用Apache POI实现Excel文件中文本内容及图片的提取; Apache POI 是基于 Office Open XML 标准(OOXML)和 Microsoft 的 OLE 2 复合文档格式(OLE2)处理各种文件格式的开源项目。

    2024年02月05日
    浏览(69)
  • JAVA解析EXCEL(JExcelAPI,POI,EasyExcel)

    demo代码:https://github.com/RwTo/excel-demo JAVA解析Excel 一般有三种方式 JExcelAPI POI EasyExcel 官网:https://jexcelapi.sourceforge.net/ 仅支持 2003 版本的Excel 也就是 后缀名为 xls 的文件 采用流式处理模型,逐行读取和写入 ——因此 可以处理大量数据,一般不会出现OOM Demo 读xls 文件 写xls 文件

    2024年02月15日
    浏览(28)
  • Java 通过POI快速导入带图片的excel并且图片不会丢失

    导入带图片的excel,这里也是研究了很久,在之前的博客中也有说明过,在项目使用过程中,发现很多时候 导入响应很慢 ,而且每次导入 图片都会丢失 几张,所以又花了点时间研究修改了下,具体如下: 这边在导入时,通过自定义注解,将excel读取到的数据转换到需要的实

    2024年02月01日
    浏览(34)
  • java poi 获取excel中的图片(包含wps中嵌入单元格图片)

    项目中有excel导入功能,并且需要导入excel中的图片;模板如图: 已知office中插入的图片为浮动形式;如图: wps中可以插入浮动图片,也可以插入嵌入单元格图片;如图: 并且在wps嵌入单元格形式的图片可以看到使用的是公式;如图:  问题来了,如何获取图片  并且将图片与单元格进行对

    2024年02月07日
    浏览(38)
  • 【193】Java8调用POI 5.2.5生成带图片的Excel文件

    本文假定 Excel 文件中保存的是员工数据,并且数据中带有员工的头像。代码支持的图片格式有png、bmp、jpg、gif。但是这里需要注意,有些网站上下载的图片虽然后缀名是 jpg,但是文件二进制内容的格式是 WebP 的。Java8 目前官方api不支持 WebP ,本文不涉及webp相关话题,本文代

    2024年02月04日
    浏览(24)
  • Java使用POI导出Excel

    在项目开发中往往需要使用到Excel的导入和导出,导入就是从Excel中导入到DB中,而导出就是从DB中查询数据然后使用POI写到Excel上。 操作Excel目前比较流行的就是 Apache POI 和阿里巴巴的 easyExcel ! 废话不多说,开始撸起来!!! POI官网;https://poi.apache.org/ POI官网API:https://poi.

    2024年02月04日
    浏览(30)
  • 使用POI实现JAVA操作Excel文件

    https://poi.apache.org/components/index.html xls最大支持65536行、256列 xlsx最大支持1048576行、16384列 poi 操作xls poi-ooml操作xlsx 优点:过程中写入缓存,不操作磁盘,最后再一次性导入磁盘,速度快+ 缺点:但是只能写入65535条数据,超过就会报异常 优点:可以写较大数据量(超过655135条)

    2024年02月14日
    浏览(30)
  • 【Java】使用POI按模板样式导出Excel

    根据模板样式进行excel导出。 首先,当然是要有一个excel模板,excel的样式用wps等进行设置。 然后就是代码的实现了,先引入POI的依赖: 然后就是实现方法里的代码,首先定义响应信息: 然后将excel模板转为输入流,这一步的实现方法有很多,具体选择因人而异,我这里就举

    2024年02月14日
    浏览(33)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包