`

poi 读取excle,含有图片

 
阅读更多

maven 依赖

 

<dependency>
			<groupId>org.apache.poi</groupId>
			<artifactId>poi</artifactId>
			<version>4.0.0</version>
		</dependency>
		<dependency>
			<groupId>org.apache.poi</groupId>
			<artifactId>poi-ooxml</artifactId>
			<version>4.0.0</version>
		</dependency>

 

import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import org.apache.poi.ooxml.POIXMLDocumentPart;
import org.apache.poi.ss.usermodel.Cell;
import org.apache.poi.ss.usermodel.PictureData;
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.ss.usermodel.WorkbookFactory;
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.XSSFShape;
import org.apache.poi.xssf.usermodel.XSSFSheet;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
import org.openxmlformats.schemas.drawingml.x2006.spreadsheetDrawing.CTMarker;

public class MyTest2 {

	private static final String EXCEL_XLS = "xls";
	private static final String EXCEL_XLSX = "xlsx";
	
	private static final String KEY_ID = "id";
	private static final String KEY_NAME = "name";
	private static final String KEY_EMAIL = "email";
	//private static final String KEY_ICON = "icon";


	/**
	 * 判断文件是否是excel
	 * 
	 * @throws Exception
	 */
	public static void checkExcelVaild(File file) throws Exception {
		if (!file.exists()) {
			throw new Exception("文件不存在");
		}
		if (!(file.isFile() && (file.getName().endsWith(EXCEL_XLS) || file.getName().endsWith(EXCEL_XLSX)))) {
			throw new Exception("文件不是Excel");
		}
	}

	public static void main(String[] args) {

		try {
			File excelFile = new File("E:/product2.xlsx");
			FileInputStream in = new FileInputStream(excelFile);
			checkExcelVaild(excelFile);
			// Workbook workbook = getWorkbok(in, excelFile);
			Workbook workbook = WorkbookFactory.create(in);

			int sheetCount = workbook.getNumberOfSheets(); // Sheet的数量
			if (sheetCount <= 0) {
				return;
			}

			/**
			 * 设置当前excel中sheet的下标:0开始
			 */
			// Sheet sheet = workbook.getSheetAt(0); // 遍历第一个Sheet

			// 获取总行数
			// System.out.println(sheet.getLastRowNum());

			List<Map<String, Object>> userListMap = new ArrayList<>();
			
			
			List<Map<String,PictureData>> picListMap = new ArrayList<>();
			for (int i = 0; i < sheetCount; i++) { // 循环sheet页

				Sheet sheet = workbook.getSheetAt(i);
				
				//图片详细信息  key excle中的索引,value 图片信息
				Map<String, PictureData> sheetPictrues07 = getSheetPictrues07(i, (XSSFSheet)sheet, (XSSFWorkbook)workbook);
				picListMap.add(sheetPictrues07);
				
				int count = 0;
				for (Row row : sheet) { //循环行
					Map<String, Object> map = new HashMap<>();
					try {
						// 跳过第一行的目录
						if (count < 1) {
							count++;
							continue;
						}

						// 如果当前行没有数据,跳出循环
						if (row.getCell(0).toString().equals("")) {
							return;
						}

						// 获取总列数(空格的不计算)
						int columnTotalNum = row.getPhysicalNumberOfCells();
						System.out.println("总列数:" + columnTotalNum);

						System.out.println("最大列数:" + row.getLastCellNum());

						
						int end = row.getLastCellNum();
						for (int j = 0; j < end; j++) { // 循环列
							
							Cell cell = row.getCell(j);
							if (cell == null) {
								System.out.print("null" + "\t");
								continue;
							}

							Object obj = getValue(cell);
							if(j == 0){
								String userId = obj.toString();
								map.put(KEY_ID, userId);
							}
							if(j == 1){
								String name = obj.toString();
								map.put(KEY_NAME, name);
							}
							if(j == 2){
								String email = obj.toString();
								map.put(KEY_EMAIL, email);
							}
							/*if(j == 3){
								String icon = obj.toString();
								map.put(KEY_ICON, icon);
							}*/
						}
					} catch (Exception e) {
						e.printStackTrace();
					}
					userListMap.add(map);
				}
			}
			System.out.println(userListMap.toString());
			System.out.println(picListMap.toString());
			
			handlerImage(picListMap);
			

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

	/**
	 * 处理图片
	 * @param picListMap  excle中图片详细信心,
	 * @throws Exception
	 */
	private static void handlerImage(List<Map<String, PictureData>> picListMap) throws Exception {
		for (Map<String, PictureData> map : picListMap) {  
            Object key[] = map.keySet().toArray();  
            for (int i = 0; i < map.size(); i++) {  
                // 获取图片流  
                PictureData pic = map.get(key[i]);  
                // 获取图片索引  
                String picName = key[i].toString();  
                // 获取图片格式  
                String ext = pic.suggestFileExtension();  
                  
                System.out.println("索引--》"+picName);
                System.out.println("图片格式--》"+ext);
                
                // 写入图片到磁盘
                byte[] data = pic.getData();  
                FileOutputStream out = new FileOutputStream("E:\\testpoi\\pic" + picName + "." + ext);  
                out.write(data);  
                out.close();  
            }  
        }
		
	}

	/** 
     * 获取Excel2007图片 
     * @param sheetNum 当前sheet编号 
     * @param sheet 当前sheet对象 
     * @param workbook 工作簿对象 
     * @return Map key:图片单元格索引(0_1_1)String,value:图片流PictureData 
     */  
    public static Map<String, PictureData> getSheetPictrues07(int sheetNum,  
            XSSFSheet sheet, XSSFWorkbook workbook) {  
        Map<String, PictureData> sheetIndexPicMap = new HashMap<String, PictureData>();  
  
        for (POIXMLDocumentPart dr : sheet.getRelations()) {  
            if (dr instanceof XSSFDrawing) {  
                XSSFDrawing drawing = (XSSFDrawing) dr;  
                List<XSSFShape> shapes = drawing.getShapes();  
                for (XSSFShape shape : shapes) {  
                    XSSFPicture pic = (XSSFPicture) shape;  
                    XSSFClientAnchor anchor = pic.getPreferredSize();  
                    CTMarker ctMarker = anchor.getFrom();  
                    String picIndex = String.valueOf(sheetNum) + "_"  
                            + ctMarker.getRow() + "_" + ctMarker.getCol();  
                    sheetIndexPicMap.put(picIndex, pic.getPictureData());  
                }  
            }  
        }  
  
        return sheetIndexPicMap;  
    }  
      

	@SuppressWarnings("deprecation")
	private static Object getValue(Cell cell) {
		Object obj = null;
		switch (cell.getCellTypeEnum()) {
		case BOOLEAN:
			obj = cell.getBooleanCellValue();
			break;
		case ERROR:
			obj = cell.getErrorCellValue();
			break;
		case NUMERIC:
			obj = cell.getNumericCellValue();
			break;
		case STRING:
			obj = cell.getStringCellValue();
			break;
		default:
			break;
		}
		return obj;
	}

}

 

 

 

 

 

 

 

 

 

分享到:
评论

相关推荐

    JAVA通过POI读取excle

    以下是一个简单的Java代码示例,展示如何使用POI读取Excel文件: ```java import org.apache.poi.ss.usermodel.*; import org.apache.poi.xssf.usermodel.XSSFWorkbook; import java.io.File; import java.io....

    用poi操作excle文件

    在本文中,我们将深入探讨如何使用Apache POI API来操作Excel文件,以便进行读取、写入和修改等任务。 一、Apache POI简介 Apache POI是一个开源项目,它提供了一系列API,使得开发者可以使用Java处理Microsoft ...

    POI操作读取EXCLE数据详细注解

    要使用POI读取Excel数据,你需要遵循以下步骤: - **引入依赖**:首先,确保在项目中添加了Apache POI的相关依赖。如果是Maven项目,可以在pom.xml中添加如下依赖: ```xml &lt;groupId&gt;org.apache.poi ...

    java使用poi进行excle读取和输出,myeclipse源码

    在使用POI读取Excel文件时,你需要创建一个`Workbook`对象,它是Excel文件的顶级容器。对于.xlsx文件,我们使用`XSSFWorkbook`,而对于.xls文件,我们使用`HSSFWorkbook`。然后,你可以通过`Sheet`对象来访问工作簿...

    poi Excle 导入导出

    "poi Excle 导入导出"这个主题主要涉及如何使用Apache POI库在Java中读取和写入Excel文件。以下是对这个主题的详细解释: 1. **Apache POI简介** Apache POI是一个强大的Java API,它允许开发人员创建、修改和显示...

    poi读取excel并输出到jsp页面

    “JSP读取excle文件(poi)_爱题巴_爱技术_小川哥_百度空间.htm”可能是一个详细教程,讲解了如何结合JSP和POI读取Excel文件。 总的来说,Apache POI提供了强大的API来读取Excel数据,而JSP则负责在Web页面上展示...

    POI导出excle例子+代码+poi文档

    在Java环境中,POI提供了一套丰富的API,使得开发者可以方便地创建、读取和修改这些文件。本教程将重点讲解如何使用Apache POI来导出Excel文件。 在“POI导出Excel例子”中,我们首先需要了解几个核心类: 1. **...

    springboot-poi-Excle.zip

    Apache POI是一个流行的开源库,它允许开发者使用Java来读取、写入和修改Microsoft Office格式的文件,包括Excel(.xlsx和.xls)。本项目"springboot-poi-Excle.zip"是一个基于Spring Boot的示例,展示了如何使用...

    web 读取excle文件需要的poi jar包

    在标题“web 读取Excel文件需要的poi jar包”和描述“java开发读取Excel问价需要的三个jar。100%通过。”中,提到的关键知识点是使用Apache POI库来读取Excel文件,并且提到了一个jar文件"exclePOI..jar"。 首先,...

    Java读取大数据量Excel的方法(POI)

    接下来,我们将详细讲解如何使用Apache POI读取大数据量的Excel文件: 1. **创建Workbook对象**:这是处理Excel文件的基础,它代表整个Excel工作簿。你可以通过`XSSFWorkbook`类的构造函数,传入文件的输入流来创建...

    Excle读取数据转换为实体List【基于apache-poi】

    3. 使用Apache POI读取Excel:下面的代码展示了如何打开Excel文件并读取数据: ```java import org.apache.poi.ss.usermodel.*; import org.apache.poi.xssf.usermodel.XSSFWorkbook; import java.io.File; import ...

    java poi操作excle例子

    在Java中,如果你需要读取、写入或修改Excel文件,Java POI库是一个非常实用的工具。本教程将详细介绍如何使用Java POI进行Excel操作。 首先,你需要在你的项目中引入Java POI库。你可以通过Maven或Gradle来添加...

    Java如何利用POI读取Excel行数

    Java如何利用POI读取Excel行数 Java如何利用POI读取Excel行数是Java开发者中一个常见的问题。在Java中,我们可以使用Apache POI库来读取Excel文件中的数据。在本篇文章中,我们将详细介绍如何使用POI库来读取Excel...

    java Excle poi简单示例

    Java中的Apache POI库是一个非常强大的工具,它允许开发者读取、写入和修改Microsoft Office格式的文件,尤其是Excel文档。在"java Excel poi简单示例"中,我们将探讨如何利用POI库来处理Excel数据。 Apache POI是...

    poi解析excle

    下面展示如何使用POI读取Excel文件并解析数据。 1. **读取Excel文件** ```java FileInputStream file = new FileInputStream("D://Book1.xls"); Workbook workbook = WorkbookFactory.create(file); Sheet ...

    读取EXCLE表相关代码

    在IT行业中,处理数据是日常任务之一,而Excel表格作为一种广泛使用的数据存储和管理格式,其读取和操作能力对于开发者来说至关重要。本资料合集专注于“读取Excel表相关代码”,将帮助你掌握如何在编程环境中高效地...

    java poi导出图片到excel示例代码

    在示例代码中,使用了Java POI读取Excel文件,并将其写入到数据库中。首先,需要创建一个Workbook对象,然后使用Workbook对象的getSheet方法获取Excel文件的Sheet对象,最后使用Sheet对象的getRow方法读取Excel文件...

    Java jxl读取excle

    这个库允许开发者读取、写入和修改Excel工作簿,使得在Java应用程序中处理数据变得更加便捷。在本文中,我们将深入探讨如何使用jxl库来读取Excel文件。 首先,你需要在项目中引入jxl库。如果使用Maven,可以在pom....

    POI 完美生成带文字水印的excle

    在Java编程环境中,Apache POI库是一个非常强大的工具,它允许开发者读取、写入和修改Microsoft Office格式的文件,包括Excel(XLS和XLSX)。本教程将深入探讨如何利用Apache POI来创建带有文字水印的Excel文档。 ...

    POI操作EXCLE

    本篇将详细介绍如何使用POI库进行Excel的操作,包括读取和写入数据,尤其适用于处理复杂的表格。 首先,`POI Test.java`和`ExcelUtil.java`这两个文件很可能是实现Excel操作的示例代码。`POITest.java`可能包含了...

Global site tag (gtag.js) - Google Analytics