`
aimy_2012
  • 浏览: 18898 次
  • 性别: Icon_minigender_1
  • 来自: 山东
社区版块
存档分类
最新评论

POI解析Excel,最高支持2010版本的Excel导入数据库

    博客分类:
  • JAVA
阅读更多
本文代码直接COPY就可以测试修改
POI解析Excel,(Excel上传,见<FLEX+JAVA+Servlet实现上传>写过,这篇也是在其基础上的)
package com.sddl.util;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;

import org.apache.poi.hssf.usermodel.HSSFCell;
import org.apache.poi.hssf.usermodel.HSSFRow;
import org.apache.poi.hssf.usermodel.HSSFSheet;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.apache.poi.xssf.usermodel.XSSFCell;
import org.apache.poi.xssf.usermodel.XSSFRow;
import org.apache.poi.xssf.usermodel.XSSFSheet;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;

/**
 * 
 * @author TXQ
 */

public class ImportExcelUtil {

	// 导入Excel
	public List<ArrayList<ArrayList<Object>>> ImportExcel(String excelName) {
		List<ArrayList<ArrayList<Object>>> resList = new ArrayList<ArrayList<ArrayList<Object>>>();
		if (excelName.substring(excelName.lastIndexOf(".")).equals(".xls")) {
			resList = this.ImportExcel2003(excelName);
		}
		if (excelName.substring(excelName.lastIndexOf(".")).equals(".xlsx")) {
			resList = this.ImportExcel2010(excelName);
		}
		// 返回List给Dao插入数据库
		System.out.println(excelName);
		new File(excelName).delete();
		return resList;
	}

	/** 获取最长的行 cellsTotal */
	public int getCellTotal(String excelName, int sheetTotal) {
		FileInputStream ipts;
		int cellTotal = 0;
		try {
			// 2007 获得最长的行
			if (excelName.substring(excelName.lastIndexOf(".")).equals(".xls")) {
				ipts = new FileInputStream(excelName);
				HSSFWorkbook hswk = new HSSFWorkbook(ipts);
				for (int j = 0; j <=hswk.getSheetAt(sheetTotal).getLastRowNum(); j++) {
					if(null!=hswk.getSheetAt(sheetTotal).getRow(j)){
						System.out.println(hswk.getSheetAt(sheetTotal).getRow(j).getLastCellNum());
						if (hswk.getSheetAt(sheetTotal).getRow(j).getLastCellNum() > cellTotal) {
							cellTotal = hswk.getSheetAt(sheetTotal).getRow(j)
									.getLastCellNum();
						}
					}
				}

			}
			// 2010 获得最长的行

			if (excelName.substring(excelName.lastIndexOf(".")).equals(".xlsx")) {
				ipts = new FileInputStream(excelName);
				XSSFWorkbook xswk = new XSSFWorkbook(ipts);
				for (int j = 0; j <= xswk.getSheetAt(sheetTotal).getLastRowNum(); j++) {
					if(null!=xswk.getSheetAt(sheetTotal).getRow(j)){
						System.out.println(xswk.getSheetAt(sheetTotal).getRow(j).getLastCellNum());
						if (xswk.getSheetAt(sheetTotal).getRow(j).getLastCellNum() > cellTotal) {
							cellTotal = xswk.getSheetAt(sheetTotal).getRow(j)
									.getLastCellNum();
						}
					}
				}
			}
		} catch (FileNotFoundException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		return cellTotal;
	}

	/**Offce2007及以下版本*/ 
	public List<ArrayList<ArrayList<Object>>> ImportExcel2003(String excelName) {
		List<ArrayList<ArrayList<Object>>> sheetList = new ArrayList<ArrayList<ArrayList<Object>>>();
		try {
			FileInputStream ipts = new FileInputStream(excelName);
			HSSFWorkbook hswk = new HSSFWorkbook(ipts);
			// 循环取出sheet
			int sheetTotal = hswk.getNumberOfSheets();
			for (int i = 0; i < sheetTotal; i++) {
				HSSFSheet xss = hswk.getSheetAt(i);
				if (null == xss) {
					continue;
				} else {
					int rowTotal = xss.getLastRowNum();
					int cellTotal = this.getCellTotal(excelName,i);
					// 循环取出行
					ArrayList<ArrayList<Object>> rowList = new ArrayList<ArrayList<Object>>();
					for (int j = 0; j <= rowTotal; j++) {
						HSSFRow xsr = xss.getRow(j);
						if (null == xsr) {
							continue;
						} else {
							ArrayList<Object> cellList = new ArrayList<Object>();
							for (int k = 0; k < cellTotal; k++) {
								HSSFCell xsc = xsr.getCell(k);
								// if
								// ((Cell.CELL_TYPE_BLANK)==xsc.getCellType()) {
								// cellList.add("");
								// }
								//
								// if
								// ((Cell.CELL_TYPE_STRING)==xsc.getCellType())
								// {
								cellList.add(xsc);
								// }
								//
								// if
								// ((Cell.CELL_TYPE_NUMERIC)==xsc.getCellType())
								// {
								// cellList.add(xsc + "");
								// }

							}
							rowList.add(cellList);
						}

					}
					sheetList.add(rowList);
				}
			}
		} catch (FileNotFoundException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		System.out.println(sheetList.get(0).get(0).toString());
		return sheetList;
	}

	/** office2010*/
	public List<ArrayList<ArrayList<Object>>> ImportExcel2010(String excelName) {
		List<ArrayList<ArrayList<Object>>> sheetList = new ArrayList<ArrayList<ArrayList<Object>>>();
		try {
			FileInputStream ipts = new FileInputStream(excelName);
			XSSFWorkbook xswk = new XSSFWorkbook(ipts);
			// 循环取出sheet
			int sheetTotal = xswk.getNumberOfSheets();
			for (int i = 0; i < sheetTotal; i++) {
				XSSFSheet xss = xswk.getSheetAt(i);
				if (null == xss) {
					continue;
				} else {
					int rowTotal = xss.getLastRowNum();
					int cellTotal = this.getCellTotal(excelName,i);
					System.out.println("cellTotal="+cellTotal);
					// 循环取出行
					ArrayList<ArrayList<Object>> rowList = new ArrayList<ArrayList<Object>>();
					for (int j = 0; j <= rowTotal; j++) {
						XSSFRow xsr = xss.getRow(j);
						if (null == xsr) {
							continue;
						} else {
							ArrayList<Object> cellList = new ArrayList<Object>();
							for (int k = 0; k < cellTotal; k++) {
								XSSFCell xsc = xsr.getCell(k);
								// if
								// ((Cell.CELL_TYPE_BLANK)==xsc.getCellType()) {
								// cellList.add("");
								// }
								//
								// if
								// ((Cell.CELL_TYPE_STRING)==xsc.getCellType())
								// {
								cellList.add(xsc);
								// }
								//
								// if
								// ((Cell.CELL_TYPE_NUMERIC)==xsc.getCellType())
								// {
								// cellList.add(xsc + "");
								// }
							}
							rowList.add(cellList);
						}

					}
					sheetList.add(rowList);
				}
			}

		} catch (FileNotFoundException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		for (int i = 0; i < sheetList.size(); i++) {
			for (int j = 0; j < sheetList.get(i).size(); j++) {
				System.out.println(sheetList.get(i).get(j).toString());
			}
		}
		return sheetList;
	}
}

测试代码
package com.sddl.util;

public class test {

	/**
	 * @author Snail
	 */
	public static void main(String[] args){
		ImportExcelUtil e = new ImportExcelUtil();
		e.ImportExcel("c://scjybcldr.xlsx");
	}
}

几个必用JAR包见附录,POI版本为3.7.包括xmlbeans.jar.
分享到:
评论

相关推荐

    利用POI解析excel并存入数据库demo

    在这个"利用POI解析excel并存入数据库demo"中,我们将关注如何使用 POI 库来读取 Excel 文件,并将数据有效地存入 MySQL 数据库。 首先,要开始使用 POI,你需要在你的项目中引入相应的依赖。如果你使用的是 Maven...

    使用POI解析excel文件并写入数据库

    本篇文章将详细讲解如何使用Apache POI解析Excel文件,并将数据写入数据库。 首先,我们需要了解Apache POI的基本概念。POI提供了一个Java API,使得开发者可以在不依赖Microsoft Office的情况下,处理Excel文件。...

    POI技术将excel解析导入mysql.pdf

    1. Apache POI技术解析Excel文档: Apache POI是Apache软件基金会的开放源代码项目,它提供了用于读取和写入Microsoft Office格式文件的API。尤其是对于Excel文档,POI提供了两种主要的Excel文件格式支持,一种是...

    poi解析excel、word2007,2010等版本

    本项目中的"poiTest"是一个Web应用示例,它演示了如何使用Apache POI来解析不同版本的Excel(如2007、2010)以及Word2007和2010文档。 1. **Apache POI 简介** Apache POI 是由Apache软件基金会开发的一个项目,...

    ssm通过POI技术把excel数据导入mysql

    通过使用POI,我们可以解析Excel工作簿、工作表、单元格等元素,进而提取数据或填充数据。例如,你可以使用`HSSFWorkbook`来处理.xls文件,`XSSFWorkbook`来处理.xlsx文件。 在SSM框架中,我们通常会创建一个服务层...

    Java 使用poi导入excel 并使用xml做数据验证

    在本项目中,我们结合了POI库和XML技术来实现Excel数据的验证与导入数据库。 首先,Apache POI提供了HSSF和XSSF两个API,分别用于处理老版本的BIFF8格式(.xls)和新版本的OOXML格式(.xlsx)。在这个案例中,我们...

    Springboot+Poi实现Excel的导入导出

    POI库提供了HSSF(用于处理老版本的.XLS格式)和XSSF(用于处理新版本的.XLSX格式)组件,可以进行创建、读取、修改Excel工作簿、工作表、单元格等操作。 在本项目中,Spring Boot结合MyBatis和POI,实现了一个完整...

    SpringBootMybatis+poi+Thymeleaf实现excel文件数据导入到数据库以及从数据库将数据导出成excel.zip

    5. **Excel数据导入到数据库**: 使用Apache POI,我们可以解析Excel文件,获取工作表和单元格的数据。然后,通过MyBatis的Mapper接口,将这些数据插入到数据库的相应表中。这涉及到SQL语句的编写,以及可能的数据...

    JAVA实现数据库数据导入导出到Excel(POI)所需jar包

    在Java开发中,有时我们需要将数据库中的数据导出到Excel文件,或者从Excel文件导入数据到数据库。Apache POI是一个流行的API,专为处理Microsoft Office格式的文件,如Excel(.xlsx, .xls)。本教程将详细介绍如何...

    excel表导入数据库 数据库导出excel(idea平台)

    通过使用POI,我们可以方便地在Java程序中创建、修改和解析Excel文件。 对于Excel数据的导入,流程通常是这样的: 1. 使用Apache POI读取Excel文件,遍历每一行每一列,将数据存储到Java对象中。 2. 创建JDBC连接,...

    POI java解析EXCEL

    在实际开发中,结合POI库,你可以构建各种数据导入导出工具,例如从Excel文件批量导入数据库,或者将数据库数据导出为Excel报告。此外,POI还广泛应用于数据分析、报表生成、数据验证等多个领域。总之,Apache POI是...

    spring boot+mybatis plus+easy poi实现数据库导出成excel和excel导入到数据库.zip

    在本项目中,"spring boot+mybatis plus+easy poi实现数据库导出成excel和excel导入到数据库",开发者利用了Spring Boot、MyBatis Plus和EasyPoi库来实现了一个功能强大的数据交互系统,允许用户将数据库中的数据...

    poi excel转换成bean

    这个过程在处理大量结构化数据时特别有用,例如导入数据库或进行数据分析。 首先,我们需要理解Java Bean。Java Bean是一种特殊的Java类,符合一定的编码规范,通常用于封装数据。它具有默认的构造函数,属性...

    大数据Excel通过POI导入数据库通用设计方案

    【大数据Excel通过POI导入数据库通用设计方案】 大数据处理中,Excel作为常见的数据交换格式,其导入到数据库的需求频繁出现。为了提高效率并避免重复工作,本方案旨在提供一种通用的Excel导入策略,利用Apache POI...

    POI解析excel文件

    2. **解析Excel文件** - **创建工作簿对象**: 使用`WorkbookFactory.create()`方法,传入一个InputStream,可以打开并加载Excel文件。 - **获取工作表**: 通过调用`Workbook`对象的`getSheet()`或`getSheetAt()`...

    SpringBoot +Mybatis +POI导入、导出Excel文件

    2. 使用POI的HSSFWorkbook(.xls)或XSSFWorkbook(.xlsx)类解析Excel文件,获取到工作簿对象。 3. 遍历工作簿中的工作表,进一步处理每个单元格的数据,将数据转化为业务模型对象。 4. 使用Mybatis的SqlSession,...

    struts1 poi Excel批量导入支持xls和xlsx-源码java

    2. **解析Excel**:使用POI API打开上传的文件,根据文件扩展名选择合适的Workbook类型。对于.xls文件,使用HSSFWorkbook;对于.xlsx文件,使用XSSFWorkbook。 3. **遍历数据**:读取Workbook中的每个Sheet,再遍历...

    poi解析jsp上传的excel文件并导入mysql(支持xls和xlsx)优化版

    POI解析Excel文件** - POI API提供了HSSF(处理.xls格式)和XSSF(处理.xlsx格式)两个接口,允许程序读取和写入Excel文件。 - 使用POI,可以逐行逐列地访问Excel工作表中的数据,将单元格的值读取出来,便于...

Global site tag (gtag.js) - Google Analytics