本文代码直接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 文件,并将数据有效地存入 MySQL 数据库。 首先,要开始使用 POI,你需要在你的项目中引入相应的依赖。如果你使用的是 Maven...
本篇文章将详细讲解如何使用Apache POI解析Excel文件,并将数据写入数据库。 首先,我们需要了解Apache POI的基本概念。POI提供了一个Java API,使得开发者可以在不依赖Microsoft Office的情况下,处理Excel文件。...
1. Apache POI技术解析Excel文档: Apache POI是Apache软件基金会的开放源代码项目,它提供了用于读取和写入Microsoft Office格式文件的API。尤其是对于Excel文档,POI提供了两种主要的Excel文件格式支持,一种是...
本项目中的"poiTest"是一个Web应用示例,它演示了如何使用Apache POI来解析不同版本的Excel(如2007、2010)以及Word2007和2010文档。 1. **Apache POI 简介** Apache POI 是由Apache软件基金会开发的一个项目,...
通过使用POI,我们可以解析Excel工作簿、工作表、单元格等元素,进而提取数据或填充数据。例如,你可以使用`HSSFWorkbook`来处理.xls文件,`XSSFWorkbook`来处理.xlsx文件。 在SSM框架中,我们通常会创建一个服务层...
在本项目中,我们结合了POI库和XML技术来实现Excel数据的验证与导入数据库。 首先,Apache POI提供了HSSF和XSSF两个API,分别用于处理老版本的BIFF8格式(.xls)和新版本的OOXML格式(.xlsx)。在这个案例中,我们...
POI库提供了HSSF(用于处理老版本的.XLS格式)和XSSF(用于处理新版本的.XLSX格式)组件,可以进行创建、读取、修改Excel工作簿、工作表、单元格等操作。 在本项目中,Spring Boot结合MyBatis和POI,实现了一个完整...
5. **Excel数据导入到数据库**: 使用Apache POI,我们可以解析Excel文件,获取工作表和单元格的数据。然后,通过MyBatis的Mapper接口,将这些数据插入到数据库的相应表中。这涉及到SQL语句的编写,以及可能的数据...
在Java开发中,有时我们需要将数据库中的数据导出到Excel文件,或者从Excel文件导入数据到数据库。Apache POI是一个流行的API,专为处理Microsoft Office格式的文件,如Excel(.xlsx, .xls)。本教程将详细介绍如何...
通过使用POI,我们可以方便地在Java程序中创建、修改和解析Excel文件。 对于Excel数据的导入,流程通常是这样的: 1. 使用Apache POI读取Excel文件,遍历每一行每一列,将数据存储到Java对象中。 2. 创建JDBC连接,...
在实际开发中,结合POI库,你可以构建各种数据导入导出工具,例如从Excel文件批量导入数据库,或者将数据库数据导出为Excel报告。此外,POI还广泛应用于数据分析、报表生成、数据验证等多个领域。总之,Apache POI是...
在本项目中,"spring boot+mybatis plus+easy poi实现数据库导出成excel和excel导入到数据库",开发者利用了Spring Boot、MyBatis Plus和EasyPoi库来实现了一个功能强大的数据交互系统,允许用户将数据库中的数据...
这个过程在处理大量结构化数据时特别有用,例如导入数据库或进行数据分析。 首先,我们需要理解Java Bean。Java Bean是一种特殊的Java类,符合一定的编码规范,通常用于封装数据。它具有默认的构造函数,属性...
【大数据Excel通过POI导入数据库通用设计方案】 大数据处理中,Excel作为常见的数据交换格式,其导入到数据库的需求频繁出现。为了提高效率并避免重复工作,本方案旨在提供一种通用的Excel导入策略,利用Apache POI...
2. **解析Excel文件** - **创建工作簿对象**: 使用`WorkbookFactory.create()`方法,传入一个InputStream,可以打开并加载Excel文件。 - **获取工作表**: 通过调用`Workbook`对象的`getSheet()`或`getSheetAt()`...
2. 使用POI的HSSFWorkbook(.xls)或XSSFWorkbook(.xlsx)类解析Excel文件,获取到工作簿对象。 3. 遍历工作簿中的工作表,进一步处理每个单元格的数据,将数据转化为业务模型对象。 4. 使用Mybatis的SqlSession,...
2. **解析Excel**:使用POI API打开上传的文件,根据文件扩展名选择合适的Workbook类型。对于.xls文件,使用HSSFWorkbook;对于.xlsx文件,使用XSSFWorkbook。 3. **遍历数据**:读取Workbook中的每个Sheet,再遍历...
POI解析Excel文件** - POI API提供了HSSF(处理.xls格式)和XSSF(处理.xlsx格式)两个接口,允许程序读取和写入Excel文件。 - 使用POI,可以逐行逐列地访问Excel工作表中的数据,将单元格的值读取出来,便于...