当前位置: 首页 > news >正文

解析excel中的图片

解析excel中的图片

  • 前言
  • 一、pom依赖
  • 二、使用步骤
    • 1.示例数据
    • 2.代码如下(示例):
  • 总结

前言

初始化数据是,需要将excel中的数据解析并插入数据库。
但是某几列存放的是图片,这时候怎么办呢。

主要解决的是:获取excel中指定行列的图片字节。


一、pom依赖

解析文件的依赖

        <dependency><groupId>org.apache.poi</groupId><artifactId>poi</artifactId></dependency><dependency><groupId>org.apache.poi</groupId><artifactId>poi-ooxml</artifactId></dependency><dependency><groupId>commons-io</groupId><artifactId>commons-io</artifactId><version>2.11.0</version></dependency>

如果执行接口报错的话,可能是poi和log4j有冲突,log4j换成下面的依赖

<dependency><groupId>org.apache.logging.log4j</groupId><artifactId>log4j-api</artifactId><version>2.17.1</version>
</dependency>
<dependency><groupId>org.apache.logging.log4j</groupId><artifactId>log4j-core</artifactId><version>2.17.1</version>
</dependency>

二、使用步骤

1.示例数据

excel的M、N列是图片,对应index为:12、13
在这里插入图片描述

2.代码如下(示例):

import lombok.extern.slf4j.Slf4j;
import org.apache.poi.ss.usermodel.Row;
import org.apache.poi.ss.usermodel.Sheet;
import org.apache.poi.ss.usermodel.Workbook;
import org.apache.poi.xssf.usermodel.XSSFClientAnchor;
import org.apache.poi.xssf.usermodel.XSSFDrawing;
import org.apache.poi.xssf.usermodel.XSSFPicture;
import org.apache.poi.xssf.usermodel.XSSFPictureData;
import org.apache.poi.xssf.usermodel.XSSFShape;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.multipart.MultipartFile;@GetMapping(value = "/uploadPointFile")public List<String> uploadPointFile(@RequestParam(value = "file") MultipartFile file) throws Exception {LinkedList<String> insertSql = new LinkedList<>();String OG_POINT = "INSERT INTO `table_one`(`id`, `city`, `district`, `street`, `community`, `name`, `address`, `deleted`, `gaoDe_log`, `gaoDe_lat`, `label`, `contact_user`, `contact_mobile`,  `remark`,`link_path`, `create_community`, `created_time`, `updated_time`) VALUES ('%s',  '%s', '%s', '%s', '%s', '%s','%s', 0, '%s', '%s', '%s', '%s', '%s', '%s','%s', '510121',now(),now());";String OGP_PICTURE = "INSERT INTO `table_two`(`id`, `point_id`, `picture_url`, `deleted`, `created_time`, `updated_time`) VALUES ('%s', '%s', 'https://xxxxx/x/%s', 0,now(),now());";InputStream inputStream = file.getInputStream();Workbook workbook = new XSSFWorkbook(inputStream);// 获取第一个工作表Sheet sheet = workbook.getSheetAt(0);for (Row row : sheet) {if (row.getRowNum() == 0) {continue; // 跳过表头}String uuid = UUID.randomUUID().toString().replaceAll("-", "");// 获取前两列内容作为图片名String ogSql = String.format(OG_POINT, uuid, row.getCell(0).toString().substring(0, 4), row.getCell(0).toString(), row.getCell(1).toString(), row.getCell(2).toString(), row.getCell(3).toString(), row.getCell(4).toString(), row.getCell(5).toString(), row.getCell(6).toString(), row.getCell(7).toString(), row.getCell(8).toString(), row.getCell(9).toString(), row.getCell(10).toString(), row.getCell(11).toString());//打印point 的sqlinsertSql.add(ogSql);// 获取工作表中的绘图对象XSSFDrawing drawing = (XSSFDrawing) sheet.getDrawingPatriarch();if (drawing == null) {continue; // 如果没有绘图对象则跳过}// 获取所有形状List<XSSFShape> shapes = drawing.getShapes();for (XSSFShape shape : shapes) {if (shape instanceof XSSFPicture) {XSSFPicture picture = (XSSFPicture) shape;XSSFClientAnchor anchor = (XSSFClientAnchor) picture.getAnchor();// 检查图片是否在目标单元格中if (row.getRowNum() == anchor.getRow1() && (anchor.getCol1() == 12 || anchor.getCol1() == 13)) {// 获取图片数据XSSFPictureData pictureData = picture.getPictureData();byte[] pictureBytes = pictureData.getData();String fileExtension = pictureData.suggestFileExtension();//调用文件上传接口String pictureUrl = "xxxxxxx";String pictureUuid = UUID.randomUUID().toString().replaceAll("-", "");String pictureSql = String.format(OGP_PICTURE, pictureUuid, uuid, pictureUrl);insertSql.add(pictureSql);}}}}return insertSql;}

总结

没有总结,歪比巴卜

http://www.xdnf.cn/news/141625.html

相关文章:

  • 深入解析YOLO v1:实时目标检测的开山之作
  • 观测云数据在Grafana展示的最佳实践
  • 【安全扫描器原理】TCP/IP协议编程
  • 在 Vue3 中封装的 Axios 实例中,若需要为部分接口提供手动取消请求的功能
  • 智慧医疗领域TMI期刊2025年3月研究热点解析
  • 【音视频】AVIO输入模式
  • 红队系列-网络安全知识锦囊-CTF(持续更新)
  • Mac「brew」快速安装Redis
  • 猫咪如厕检测与分类识别系统系列【十三】猫咪进出事件逻辑及日志优化【下】
  • 第六章 进阶06 读书群第一次团建
  • Kubernetes in action-初相识
  • 从StandardMaterial和PBRMaterial到PBRMetallicRoughnessMaterial:Babylon.js材质转换完全指南
  • linux 部署express项目,并使用pm2守护进程
  • yum包管理器
  • systemctl 命令详解与常见问题解决
  • .NET中,const和readonly区别
  • NLP高频面试题(五十五)——DeepSeek系列概览与发展背景
  • 自动清空 maven 项目临时文件,vue 的 node_modules 文件
  • Virtuoso ADE采用Spectre仿真中出现MOS管最小长宽比满足要求依然报错的情况解决方法
  • 【高频考点精讲】async/await原理剖析:Generator和Promise的完美结合
  • RTMP 入门指南
  • Aloudata Agent :基于 NoETL 明细语义层的分析决策智能体
  • Linux阻塞与非阻塞I/O:从原理到实践详解
  • 学硕热度下降,25西电数学与统计学院(考研录取情况)
  • 高频面试题:如何保证数据库和es数据一致性
  • ES历史版本下载
  • 第TR5周:Transformer实战:文本分类
  • 图像识别系统 - Ubuntu部署指南(香橙派开发板测试)-学习记录1
  • MySQL 详解之函数:数据处理与计算的利器
  • HOW - 如何模拟实现 gpt 展示答案的交互效果