JAVA POI的excel中包含图片进行读取保存,单张图片,多张图片

这篇具有很好参考价值的文章主要介绍了JAVA POI的excel中包含图片进行读取保存,单张图片,多张图片。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

JAVA POI的excel中包含图片进行读取保存,单张图片,多张图片

---------------------------------------------效果----------------------------------------------------------

1.单张图片
java 提取excel中图片,poi导入导出,java,excel,开发语言

2.多张图片
java 提取excel中图片,poi导入导出,java,excel,开发语言文章来源地址https://www.toymoban.com/news/detail-670945.html

import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;

import org.apache.poi.hssf.usermodel.HSSFClientAnchor;
import org.apache.poi.hssf.usermodel.HSSFPicture;
import org.apache.poi.hssf.usermodel.HSSFRow;
import org.apache.poi.hssf.usermodel.HSSFShape;
import org.apache.poi.hssf.usermodel.HSSFSheet;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.apache.poi.ss.usermodel.PictureData;

public class importExcelByImg {

	public static void main(String[] args) {
		// 1.一个单元格一个图片
		importExcelOne();
		// 2.一个单元格多个图片
		importExcelTwo();

	}

	/**
	 * 1.一个单元格一个图片
	 */
	public static void importExcelOne() {
		try {
			FileInputStream fileInputStream = new FileInputStream("D://1603169080802.xls");

			HSSFWorkbook hssfWorkbook = new HSSFWorkbook(fileInputStream);// 工作簿

			HSSFSheet sheet = hssfWorkbook.getSheetAt(0);// 工作表

			int lastRowNum = sheet.getLastRowNum();// 获取最后一行序号,从零开始

			Map<String, PictureData> picMap = new HashMap<>();// 存储图片信息和坐标

			List<HSSFShape> list = sheet.getDrawingPatriarch().getChildren();

			if (list != null && list.size() > 0) {// 处理获取图片信息和坐标
				list = list.stream().filter(item -> item instanceof HSSFPicture).collect(Collectors.toList());// 过滤出图片的数据
				for (HSSFShape hssfShape : list) {
					HSSFPicture hSSFPicture = (HSSFPicture) hssfShape;
					HSSFClientAnchor hSSFClientAnchor = (HSSFClientAnchor) hSSFPicture.getAnchor();
					PictureData pictureData = hSSFPicture.getPictureData();
					picMap.put(hSSFClientAnchor.getRow1() + "," + hSSFClientAnchor.getCol1(), pictureData);
				}
			}

			for (int i = 1; i <= lastRowNum; i++) {
				HSSFRow row = sheet.getRow(i);
				String name = row.getCell(0) == null ? "" : row.getCell(0).getStringCellValue();
				String sex = row.getCell(1) == null ? "" : row.getCell(1).getStringCellValue();

				// 获取图片数据
				PictureData pictureData = picMap.get(i + "," + 2);
				String path = "";
				if (pictureData != null) {
					String suggestFileExtension = pictureData.suggestFileExtension();// 图片格式
					path = "D://" + i + "-2." + suggestFileExtension;// 存储路径
					FileOutputStream out = new FileOutputStream(path);// 流写入
					out.write(pictureData.getData());
					out.close();
				}

				System.out.println("名称:" + name + ",    性别:" + sex + ",    图片存储路径:" + path);

			}

		} catch (IOException e) {
			e.printStackTrace();
		}
	}

	/**
	 * 1.一个单元格多图片
	 */
	public static void importExcelTwo() {
		try {
			FileInputStream fileInputStream = new FileInputStream("D://1603169081675.xls");

			HSSFWorkbook hssfWorkbook = new HSSFWorkbook(fileInputStream);// 工作簿

			HSSFSheet sheet = hssfWorkbook.getSheetAt(0);// 工作表

			int lastRowNum = sheet.getLastRowNum();// 获取最后一行序号,从零开始

			Map<String, List<PictureData>> picMap = new HashMap<>();// 存储图片信息和坐标

			List<HSSFShape> list = sheet.getDrawingPatriarch().getChildren();

			if (list != null && list.size() > 0) {// 处理获取图片信息和坐标
				list = list.stream().filter(item -> item instanceof HSSFPicture).collect(Collectors.toList());// 过滤出图片的数据
				for (HSSFShape hssfShape : list) {
					HSSFPicture hSSFPicture = (HSSFPicture) hssfShape;
					HSSFClientAnchor hSSFClientAnchor = (HSSFClientAnchor) hSSFPicture.getAnchor();
					PictureData pictureData = hSSFPicture.getPictureData();
					String point = hSSFClientAnchor.getRow1() + "," + hSSFClientAnchor.getCol1();
					// 如果存在这个坐标KEY表示相同单元格中的图片,直接集合添加该图片,不存在该坐标key直接创建添加
					if (picMap.containsKey(point)) {
						picMap.get(point).add(pictureData);
					} else {
						List<PictureData> arrayList = new ArrayList<PictureData>();
						arrayList.add(pictureData);
						picMap.put(point, arrayList);
					}
				}
			}

			for (int i = 1; i <= lastRowNum; i++) {
				HSSFRow row = sheet.getRow(i);
				String name = row.getCell(0) == null ? "" : row.getCell(0).getStringCellValue();
				String sex = row.getCell(1) == null ? "" : row.getCell(1).getStringCellValue();

				// 获取图片数据
				List<PictureData> pictureDataList = picMap.get(i + "," + 2);
				String paths = "";
				if (pictureDataList != null)
					for (PictureData pictureData : pictureDataList) {
						String suggestFileExtension = pictureData.suggestFileExtension();// 图片格式
						String path = "D://" + i + "-2--" + pictureDataList.indexOf(pictureData) + "."
								+ suggestFileExtension;// 存储路径
						paths = paths + path;
						FileOutputStream out = new FileOutputStream(path);// 流写入
						out.write(pictureData.getData());
						out.close();
					}

				System.out.println("名称:" + name + ",    性别:" + sex + ",    图片存储路径:" + paths);

			}

		} catch (IOException e) {
			e.printStackTrace();
		}
	}

}

到了这里,关于JAVA POI的excel中包含图片进行读取保存,单张图片,多张图片的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

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

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

相关文章

  • springboot后端存储富文本内容(含图片内容)

    springboot:后端快速应用开发框架。 tinymce:简单的富文本编辑器。 base64:Base64是网络上最常见的用于传输8Bit字节码的编码方式之一,Base64就是一种基于64个可打印字符来表示二进制数据的方法。编码规则:把3个字节变成4个字节;每76个字符加一个换行符;最后的结束符也要处理

    2024年02月02日
    浏览(36)
  • C# 操作 Word 全域查找且替换(含图片对象)

    目录 关于全域查找且替换 Word应用样本 SqlServer数据表部分设计样本 范例运行环境 配置Office DCOM 设计实现 组件库引入 实现原理 查找且替换的核心代码 窗格内容 页眉内容 页脚内容 形状内容 小结 C#全域操作 Word 查找且替换主要包括如下四个对象: 序号 对象 说明 1 Word.Appic

    2024年04月10日
    浏览(26)
  • 【Python小技巧】使用Gradio轻松部署AI算法结果可视化Web 应用(含图片转换、验证码识别完整源码)

    随着人工智能的不断发展,各种智能算法越来越普遍,但是这些算法结果通常显示在cmd命令窗口里。有没有一种方法可以动态展示,更具需要计算后动态展现? 答案是有! 下面让我了解一下Gradio库,只需寥寥几行代码就可以展现出chatGPT的对话窗口,是不是很nice! Gradio是一

    2024年02月15日
    浏览(36)
  • 【微信小程序】使用weui组件库来实现弹出一个确认的弹窗popup,其中包含图片和名称

    在微信小程序中,你可以使用weui组件库来实现弹出一个确认的popup,并在其中包含图片和名称。以下是一个示例代码: 在wxml文件中,添加一个按钮来触发弹出确认popup: 在wxss文件中,定义确认popup的样式: 在js文件中,编写相应的逻辑来显示和隐藏确认popup,并传递图片和名

    2024年02月17日
    浏览(32)
  • Java使用POI读取Excel名称管理器

    本文主要介绍如何使用poi读取到Excel的名称管理器中的内容。并且定位到单元格。 在企业的开发中可能需要通过名称管理器定位到某个单元格,然后在单元格上生成签名。 Java:Jdk1.8 poi:5.2.3 maven依赖(pom.xml): poi的WorkBook有个getNames方法可以读到名称。 Excel的名称在下图中新建

    2024年02月14日
    浏览(31)
  • java通过poi读取excel中的日期类型

    Java 读取Excel表格日期类型数据的时候,读出来的是这样的 12-十月-2020,而Excel中输入的是 2020/10/12 或 2020-10-12 poi处理excel时,当excel没有明确指明是哪个类型的数据时,poi很可能处理单元格的日期数据时就有可能是一串数字,而使用java程序基本无法转换。 Excel数据处理: Exc

    2024年02月15日
    浏览(31)
  • Java poi之Excel文本图片内容提取

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

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

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

    2024年02月01日
    浏览(34)
  • Java使用POI解析带图片的excel,简洁好用

            这天遇到这个这样的需求,需要导入表格中的数据,还得支持带图片;这应该难不倒咱阿里的EasyExcel,打开官网文档一看哦豁,明确表示暂时不支持解析带图片的Excel...... 好了,这下只能看POI了,然后想起来项目里引入的HuTools工具类,它应该封装好了吧;于是决定用

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

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

    2024年02月07日
    浏览(38)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包