解析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.mzph.cn/pingmian/78341.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Unity任务系统笔记

数据结构设计 任务基类包括的字段&#xff1a; string 任务内容&#xff1b; Transform 任务目的地&#xff1b; MyCharacter 任务开启后要更新对话的NPC&#xff1b; MyTalkData 任务开启后相关NPC要说的对话数据&#xff1b; 共同方法&#xff1a;开启任务、完成任务。…

STM32的开发环境介绍

目录 STM32软件环境 Keil软件在线安装 其他软件环境安装 STM32开发的几种方式 STM32寄存器版本和库函数版本 标准外设库的作用&#xff1a; STM32软件环境 STM32 的集成开发环境&#xff08;IDE&#xff09;&#xff1a;编辑编译软件 常见的环境&#xff1a; (1)KEIL&a…

【特殊场景应对9】视频简历的适用场景与风险分析

写在最前 作为一个中古程序猿,我有很多自己想做的事情,比如埋头苦干手搓一个低代码数据库设计平台(目前只针对写java的朋友),比如很喜欢帮身边的朋友看看简历,讲讲面试技巧,毕竟工作这么多年,也做到过高管,有很多面人经历,意见还算有用,大家基本都能拿到想要的offe…

Linux系统性能调优技巧分享

在数字化时代,Linux 系统以其开源、稳定、高效的特性,成为服务器、云计算、物联网等领域的核心支撑。然而,随着业务规模的扩大和负载的增加,系统性能问题逐渐凸显。掌握 Linux 系统性能调优技巧,不仅能提升系统运行效率,还能降低运维成本。下面从多个方面介绍实用的性能调…

关于Code_流苏:商务合作、产品开发、计算机科普、自媒体运营,一起见证科技与艺术的交融!

Code_流苏 &#x1f33f; 名人说&#xff1a;路漫漫其修远兮&#xff0c;吾将上下而求索。—— 屈原《离骚》 创作者&#xff1a;Code_流苏(CSDN)&#xff08;一个喜欢古诗词和编程的Coder&#x1f60a;&#xff09; &#x1f31f; 欢迎来到Code_流苏的CSDN主页 —— 与我一起&…

系统架构设计(三):质量属性

常见分类 一般来说&#xff0c;质量属性可以分为以下几类&#xff1a; 类别常见质量属性性能相关响应时间、吞吐量、资源利用率、实时性、可扩展性可用性相关可用性、高可用性&#xff08;HA&#xff09;、可靠性、容错性、恢复性可维护性相关可维护性、可测试性、可扩展性、…

【锂电池剩余寿命预测】GRU门控循环单元锂电池剩余寿命预测(Matlab完整源码)

目录 效果一览程序获取程序内容代码分享研究内容GRU门控循环单元在锂电池剩余寿命预测中的应用摘要关键词1. 引言1.1 研究背景1.2 研究现状与问题1.3 研究目的与意义2. 文献综述2.1 锂电池剩余寿命预测传统方法2.2 深度学习在锂电池寿命预测中的应用2.3 研究空白与本文切入点3.…

SpringCloud原理和机制

Spring Cloud 是一套基于Spring Boot的微服务开发工具集&#xff0c;它提供了在分布式系统环境下构建应用程序所需的一系列工具和服务。Spring Cloud旨在帮助开发人员快速构建一些常见的微服务模式&#xff0c;如服务发现、配置管理、智能路由、熔断器、微代理、控制总线等。 …

LeetCode -- Flora -- edit 2025-04-25

1.盛最多水的容器 11. 盛最多水的容器 已解答 中等 相关标签 相关企业 提示 给定一个长度为 n 的整数数组 height 。有 n 条垂线&#xff0c;第 i 条线的两个端点是 (i, 0) 和 (i, height[i]) 。 找出其中的两条线&#xff0c;使得它们与 x 轴共同构成的容器可以容纳最…

有关图的类型的题目以及知识点(2)

1、具有5个顶点的有向完全图有20条弧。 2、若一个有向图用邻接矩阵表示&#xff0c;则第个结点的入度就是&#xff1a;第i列的非零元素的个数。 3、有向图的邻接矩阵可以是对称的&#xff0c;也可以是不对称的。 4、设N个顶点E条边的图用邻接表存储&#xff0c;则求每个顶点…

正则表达式的捕获组

是正则表达式中的一个重要概念&#xff0c;用于提取字符串中的特定部分 捕获组是通过正则表达式中的圆括号 () 定义的&#xff0c;它的作用是&#xff1a; 划分和标记&#xff1a;将正则表达式的一部分划分为逻辑单元。 提取数据&#xff1a;从字符串中提取符合组内模式的内容…

deepseek-cli开源的强大命令行界面,用于与 DeepSeek 的 AI 模型进行交互

一、软件介绍 文末提供程序和源码下载 deepseek-cli一个强大的命令行界面&#xff0c;用于与 DeepSeek 的 AI 模型进行交互。 二、Features 特征 Multiple Model Support 多模型支持 DeepSeek-V3 (deepseek-chat) DeepSeek-R1 &#xff08;deepseek-reasoner&#xff09;Dee…

Java—— 五道算法水题

第一题 需求&#xff1a; 包装类&#xff1a;键盘录入一些1~100之间的整数&#xff0c;并添加到集合中。直到集合中所有数据和超过200为止 代码实现&#xff1a; import java.util.ArrayList; import java.util.Scanner;public class Test1 {public static void main(String[]…

安全编排自动化与响应(SOAR):从事件响应到智能编排的技术实践

安全编排自动化与响应&#xff08;SOAR&#xff09;&#xff1a;从事件响应到智能编排的技术实践 在网络安全威胁复杂度指数级增长的今天&#xff0c;人工处理安全事件的效率已难以应对高频攻击&#xff08;如日均万级的恶意IP扫描&#xff09;。安全编排自动化与响应&#xf…

网络原理 - 9

目录 数据链路层 以太网 以太网帧格式 MAC 地址 DNS&#xff08;Domain Name System&#xff09; 完&#xff01; 数据链路层 这里的内容也是简单了解&#xff0c;除非是做交换机开发&#xff0c;一般程序员不需要涉及~~ 以太网 ”以太网“不是一种具体的网络&#xf…

unity bug

发现一个奇怪的bug&#xff0c;就是某些unity版本打包apk时候不允许StreamingAssets里面有中文文件或者中文路径。比如下图这面这俩都是不行的。 解决方案&#xff1a;中文改为英文即可。 一般报错信息如下&#xff1a; > Configure project :launcher WARNING:The option s…

【Linux网络】打造初级网络计算器 - 从协议设计到服务实现

&#x1f4e2;博客主页&#xff1a;https://blog.csdn.net/2301_779549673 &#x1f4e2;博客仓库&#xff1a;https://gitee.com/JohnKingW/linux_test/tree/master/lesson &#x1f4e2;欢迎点赞 &#x1f44d; 收藏 ⭐留言 &#x1f4dd; 如有错误敬请指正&#xff01; &…

计算机视觉——对比YOLOv12、YOLOv11、和基于Darknet的YOLOv7的微调对比

概述 目标检测领域取得了巨大进步&#xff0c;其中 YOLOv12、YOLOv11 和基于 Darknet 的 YOLOv7 在实时检测方面表现出色。尽管这些模型在通用目标检测数据集上表现卓越&#xff0c;但在 HRSC2016-MS&#xff08;高分辨率舰船数据集&#xff09; 上对 YOLOv12 进行微调时&…

‌MySQL 事务隔离级别详解

‌ 以下是 MySQL 支持的四种事务隔离级别及其特性&#xff0c;按并发安全性从低到高排列&#xff1a; ‌1. 读未提交 (Read Uncommitted)‌ ‌问题‌&#xff1a; ‌脏读 (Dirty Read)‌&#xff1a;事务可读取其他事务未提交的数据。‌不可重复读 (Non-repeatable Read)‌&am…

如何解决IDE项目启动报错 error:0308010C:digital envelope routines::unsupported 问题

如何解决IDE项目启动报错 error:0308010C:digital envelope routines::unsupported 问题 在现代软件开发过程中&#xff0c;开发人员通常使用集成开发环境&#xff08;IDE&#xff09;如IntelliJ IDEA、Visual Studio Code&#xff08;VSCode&#xff09;等进行Node.js项目开发…