栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

java解析Excel中图片

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

java解析Excel中图片

多余话不说,直接上代码
package org.springblade.common.utils;

import org.apache.poi.POIXMLDocumentPart;
import org.apache.poi.hssf.usermodel.*;
import org.apache.poi.ss.usermodel.PictureData;
import org.apache.poi.ss.usermodel.Sheet;
import org.apache.poi.ss.usermodel.Workbook;
import org.apache.poi.xssf.usermodel.*;
import org.openxmlformats.schemas.drawingml.x2006.spreadsheetDrawing.CTMarker;

import java.io.FileInputStream;
import java.io.IOException;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.concurrent.atomic.AtomicInteger;


public class ExcelImageConverter {

	public static void main(String[] args) throws IOException {
		String filePath = "C:\Users\Administrator\Downloads\Image.xlsx";
		Map image = getImage(filePath);
		System.out.println(image);
	}

	
	public static Map getImage(String filePath) throws IOException {
		if (!filePath.endsWith(".xls") && !filePath.endsWith(".xlsx")) {
			throw new RuntimeException("后缀必须是.xls或.xlsx");
		}
		Workbook wookbook;
		Sheet sheet;
		try(FileInputStream fis = new FileInputStream(filePath)) {
			if (filePath.endsWith(".xls")) {
				// 2003版本的excel,用.xls结尾
				wookbook = new HSSFWorkbook(fis); // 得到工作簿
				sheet = wookbook.getSheetAt(0);
				return getImageXLS((HSSFSheet) sheet);
			} else {
				// 2007版本的excel,用.xlsx结尾
				wookbook = new XSSFWorkbook(fis);//得到工作簿
				sheet = wookbook.getSheetAt(0);
				return getImageXLSX((XSSFSheet) sheet);
			}
		}
	}

	
	public static Map getImageXLS(HSSFSheet sheet) {
		AtomicInteger index = new AtomicInteger();
		Map map = new HashMap<>();
		List shapes = sheet.getDrawingPatriarch().getChildren();
		shapes.forEach(v -> {
			if (v instanceof HSSFPicture) {
				HSSFPicture picture = (HSSFPicture) v;
				HSSFClientAnchor cAnchor = (HSSFClientAnchor) picture.getAnchor();
				PictureData data = picture.getPictureData();
				// 行号-列号-图片序号
				String key = cAnchor.getRow1() + "-" + cAnchor.getCol1() + "-" + index.getAndIncrement();
				map.put(key, data);
			}
		});
		return map;
	}

	
	public static Map getImageXLSX(XSSFSheet sheet) {
		AtomicInteger index = new AtomicInteger();
		Map map = new HashMap<>();
		List documentParts = sheet.getRelations();
		documentParts.forEach(v -> {
			if (v instanceof XSSFDrawing) {
				XSSFDrawing drawing = (XSSFDrawing) v;
				List shapes = drawing.getShapes();
				shapes.forEach(s -> {
					XSSFPicture picture = (XSSFPicture) s;
					XSSFClientAnchor anchor = picture.getPreferredSize();
					CTMarker marker = anchor.getFrom();
					String key = marker.getRow() + "-" + marker.getCol() + "-" + index.getAndIncrement();
					map.put(key, picture.getPictureData());
				});
			}
		});
		return map;
	}

}

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/980873.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号