POI读取Excel(xls、xlsx均可以)——(四)
maven构建的项目-->pom.xml文件
- eclipse提供Dependencies直接添加依赖jar包的工具:直接搜索poi以及poi-ooxml即可,maven会自动依赖需要的jar包:
- poi提供microsoft office旧版本支持,eg .xls Excel (2003-2007的版本)
- poi-ooxml提供microsoft office新版本支持,eg .xlsx Excel (2007以后的版本)
- 或者手动修改pom.xml,在添加jar包依赖的地方加入
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi-ooxml</artifactId>
<version>3.9</version>
</dependency>
或者:
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi</artifactId>
<version>3.9</version>
</dependency>
注意: HSSFWorkbook是97-03版本的xls版本,XSSFWorkbook是07版本的xlsx
- HSSFXXX读取03-07版本的xls的excel: (注意引入的是POI的包,如果读取的是xlsx后缀的excel会报错)
import java.io.FileInputStream;
import java.io.IOException; 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.ss.usermodel.Cell;
import org.apache.poi.ss.usermodel.Workbook;
import org.apache.poi.xssf.usermodel.XSSFCell;
import org.apache.poi.xssf.usermodel.XSSFRow;
import org.apache.poi.xssf.usermodel.XSSFSheet; @SuppressWarnings("all")
/**
* java读取低版本的Excel(03版本的Excel)
*
* @author: qlq
* @date : 2018年7月4日下午3:21:50
*/
public class POIRead03VersionExcel { public static void main(String[] args) throws IOException {
try {
// 获取一个工作簿
Workbook workbook = new HSSFWorkbook(new FileInputStream("G:\\tmpfile\\excel\\user.xls")); // 获取一个工作表两种方式
// HSSFSheet sheet = workbook.getSheet("sheet0");
// 获取工作表的第二种方式
HSSFSheet sheet = (HSSFSheet) workbook.getSheetAt(0); int firstRow = 0;
// 获取sheet的最后一行
int lastRow = sheet.getLastRowNum();
for (int i = firstRow; i <= lastRow; i++) {
HSSFRow row = sheet.getRow(i);
int lastCol = row.getLastCellNum();
for (int j = 0; j < lastCol; j++) {
HSSFCell cell = row.getCell(j);
cell.setCellType(Cell.CELL_TYPE_STRING);// 强制作为String处理
String value = cell.getStringCellValue();
System.out.print(value + " ");
}
System.out.println();
}
} catch (IOException e) {
e.printStackTrace();
} }
}
结果:
- XSSFXXX读取07年以后高版本的Excel的方法:(注意需要引入的是poi-ooxml包,如果读取03版本的xls的excel会报错)
需要的jar包:
import java.io.IOException; import org.apache.poi.ss.usermodel.Cell;
import org.apache.poi.ss.usermodel.Workbook;
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; @SuppressWarnings("all")
/**
* java读取高版本的excel(xlsx后缀的excel)
*
* @author: qlq
* @date : 2018年7月4日下午3:21:50
*/
public class POIRead07VersionExcel { public static void main(String[] args) throws IOException {
try {
// 获取一个工作簿
// 第一种创建XSSFWorkbook的方法:
/*
* File file = new
* File("C:/Users/liqiang/Desktop/考核/系统管理/导入excel模板/user.xlsx");
* XSSFWorkbook workbook = new
* XSSFWorkbook(FileUtils.openInputStream(file));
*/
// 第二种创建XSSFWorkbook的方法
Workbook workbook = new XSSFWorkbook("G:\\tmpfile\\excel\\user.xlsx"); // 获取一个工作表两种方式
// HSSFSheet sheet = workbook.getSheet("sheet0");
// 获取工作表的第二种方式
XSSFSheet sheet = (XSSFSheet) workbook.getSheetAt(0); int firstRow = 0;
// 获取sheet的最后一行
int lastRow = sheet.getLastRowNum();
for (int i = firstRow; i <= lastRow; i++) {
XSSFRow row = sheet.getRow(i);
int lastCol = row.getLastCellNum();
for (int j = 0; j < lastCol; j++) {
XSSFCell cell = row.getCell(j);
cell.setCellType(Cell.CELL_TYPE_STRING);// 强制将读取的数据作为String处理,否则读取数字会报错
String value = cell.getStringCellValue();
System.out.print(value + " ");
}
System.out.println();
}
} catch (IOException e) {
e.printStackTrace();
} }
}
结果:
- 解决上述问题,编写一个方法可以读取07或者03版本的Excel的方法:
第一种方法:
思路:根据文件的后缀是xls还是xlsx来判断读取调用读取03还是07版本的方法。
import java.io.FileInputStream;
import java.io.IOException;
import java.nio.file.FileAlreadyExistsException;
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.ss.usermodel.Cell;
import org.apache.poi.ss.usermodel.Workbook;
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; @SuppressWarnings("all")
/**
* java读取03和07版本的excel的方法
*
* @author: qlq
* @date : 2018年7月4日下午3:21:50
*/
public class POIRead07And03VersionExcel { public static void main(String[] args) throws IOException {
String filePath = "G:\\tmpfile\\excel\\user.xls";
if ("xlsx".equals(getFileExtendsName(filePath))) {
readXlsxExcel(filePath);
}
if ("xls".equals(getFileExtendsName(filePath))) {
readXlsExcel(filePath);
}
} /**
* 读取excel的拓展名
*
* @param fileName
* @return
*/
public static String getFileExtendsName(String fileName) {
if (fileName == null) {
return null;
}
return fileName.substring(fileName.lastIndexOf(".") + 1, fileName.length());
} /**
* 读取03-07年的Excel的方法
*
* @param filePath
* 文件名字
*/
private static void readXlsExcel(String filePath) {
try {
// 获取一个工作簿
Workbook workbook = new HSSFWorkbook(new FileInputStream(filePath)); // 获取一个工作表两种方式
// HSSFSheet sheet = workbook.getSheet("sheet0");
// 获取工作表的第二种方式
HSSFSheet sheet = (HSSFSheet) workbook.getSheetAt(0); int firstRow = 0;
// 获取sheet的最后一行
int lastRow = sheet.getLastRowNum();
for (int i = firstRow; i <= lastRow; i++) {
HSSFRow row = sheet.getRow(i);
int lastCol = row.getLastCellNum();
for (int j = 0; j < lastCol; j++) {
HSSFCell cell = row.getCell(j);
cell.setCellType(Cell.CELL_TYPE_STRING);// 强制作为String处理
String value = cell.getStringCellValue();
System.out.print(value + " ");
}
System.out.println();
}
} catch (IOException e) {
e.printStackTrace();
} } /**
* 读取07年以后的Excel的方法
*
* @param filePath
* 文件名字
*/
private static void readXlsxExcel(String filePath) {
try {
// 获取一个工作簿
// 第一种创建XSSFWorkbook的方法:
/*
* File file = new
* File("C:/Users/liqiang/Desktop/考核/系统管理/导入excel模板/user.xlsx");
* XSSFWorkbook workbook = new
* XSSFWorkbook(FileUtils.openInputStream(file));
*/
// 第二种创建XSSFWorkbook的方法
Workbook workbook = new XSSFWorkbook(filePath); // 获取一个工作表两种方式
// HSSFSheet sheet = workbook.getSheet("sheet0");
// 获取工作表的第二种方式
XSSFSheet sheet = (XSSFSheet) workbook.getSheetAt(0); int firstRow = 0;
// 获取sheet的最后一行
int lastRow = sheet.getLastRowNum();
for (int i = firstRow; i <= lastRow; i++) {
XSSFRow row = sheet.getRow(i);
int lastCol = row.getLastCellNum();
for (int j = 0; j < lastCol; j++) {
XSSFCell cell = row.getCell(j);
cell.setCellType(Cell.CELL_TYPE_STRING);// 强制将读取的数据作为String处理,否则读取数字会报错
String value = cell.getStringCellValue();
System.out.print(value + " ");
}
System.out.println();
}
} catch (IOException e) {
e.printStackTrace();
}
} }
第二种方法:(重要------ 一般用这种)
思路:使用其父类对象,对Workbook进行try..catch 如果创建03版本的HSSF...报错就创建07版本的XSSF...。这也是一种重要的思路,用父类接受对象的实例。
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException; 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.ss.usermodel.Cell;
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.xssf.usermodel.XSSFWorkbook; @SuppressWarnings("all")
/**
* 读取通用Excel的第二种方法
*
* @author: qlq
* @date : 2018年7月4日下午5:42:02
*/
public class POIRead07And03VersionExcel2 { public static void main(String[] args) throws IOException {
File file = new File("G:/tmpfile/excel/user.xls");
// 1.创建WorkBook
Workbook workbook = null;
try {
workbook = new XSSFWorkbook(file);
} catch (Exception e) {
workbook = new HSSFWorkbook(new FileInputStream(file));
} // 获取一个工作表两种方式
// HSSFSheet sheet = workbook.getSheet("sheet0");
// 获取工作表的第二种方式
Sheet sheet = workbook.getSheetAt(0); int firstRow = 0;
// 获取sheet的最后一行
int lastRow = sheet.getLastRowNum();
for (int i = firstRow; i <= lastRow; i++) {
Row row = sheet.getRow(i);
int lastCol = row.getLastCellNum();
for (int j = 0; j < lastCol; j++) {
Cell cell = row.getCell(j);
cell.setCellType(Cell.CELL_TYPE_STRING);// 强制作为String处理
String value = cell.getStringCellValue();
System.out.print(value + " ");
}
System.out.println();
}
} }
补充:
1.如果读取的是数字,想作为字符串处理需要强制单元格读取的时候以字符串处理:
cell.setCellType(Cell.CELL_TYPE_STRING);// 强制作为String处理
String value = cell.getStringCellValue();
补充:读取行与列的时候也可以用迭代器遍历的方式进行读取(建议行用迭代器读取,列还用原来的方式读取)
package cn.xm.exam.test; import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.util.Iterator; import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.apache.poi.ss.usermodel.Cell;
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.xssf.usermodel.XSSFWorkbook; @SuppressWarnings("all")
/**
* 读取通用Excel的第二种方法
*
* @author: qlq
* @date : 2018年7月4日下午5:42:02
*/
public class POIRead07And03VersionExcel3 { public static void main(String[] args) throws IOException {
File file = new File("C:\\Users\\Administrator\\Desktop\\test.xlsx");
// 1.创建WorkBook
Workbook workbook = null;
try {
workbook = new XSSFWorkbook(file);
} catch (Exception e) {
workbook = new HSSFWorkbook(new FileInputStream(file));
} // 获取一个工作表两种方式
// HSSFSheet sheet = workbook.getSheet("sheet0");
// 获取工作表的第二种方式
Sheet sheet = workbook.getSheetAt(0); // 标记行号
int i = 0;
for (Iterator<Row> iterator = sheet.rowIterator(); iterator.hasNext();) {
Row row = iterator.next();
if (row == null) {
continue;
} i++;
if (i <= 1) {
System.out.println("跳过行头");
continue;
} for (Iterator<Cell> cellIterator = row.cellIterator(); cellIterator.hasNext();) {
Cell cell = cellIterator.next();
cell.setCellType(Cell.CELL_TYPE_STRING);// 强制将读取的数据作为String处理,否则读取数字会报错
String stringCellValue = cell.getStringCellValue();
System.out.print(stringCellValue + "\t");
}
System.out.println();
}
} }
原来excel内容:
读取结果:
POI读取Excel(xls、xlsx均可以)——(四)的更多相关文章
- poi 读取 excel (.xls) 97-2003
1.sh.getLastRowNum() 比行数少1 private List<Map> getData(File file) throws Exception{ List<Map& ...
- poi 读取 excel(.xlsx) 2007及以上版本
1.注意的一点是sh.getLastRowNum(),比实际的行数少一行 涉及到的包:
- 项目一:第四天 1、快递员的条件分页查询-noSession,条件查询 2、快递员删除(逻辑删除) 3、基于Apache POI实现批量导入区域数据 a)Jquery OCUpload上传文件插件使用 b)Apache POI读取excel文件数据
1. 快递员的条件分页查询-noSession,条件查询 2. 快递员删除(逻辑删除) 3. 基于Apache POI实现批量导入区域数据 a) Jquery OCUpload上传文件插件使用 b) ...
- 使用jxl,poi读取excel文件
作用:在java后台添加一个方法,读取导入的excel内容,根据需要返回相应的sql语句,以完成对临时表的插入操作. 使用jxl读取excel文件 package com.sixthf.bi.sapp ...
- JAVA使用POI读取EXCEL文件的简单model
一.JAVA使用POI读取EXCEL文件的简单model 1.所需要的jar commons-codec-1.10.jarcommons-logging-1.2.jarjunit-4.12.jarlo ...
- java用poi读取Excel表格中的数据
Java读写Excel的包是Apache POI(项目地址:http://poi.apache.org/),因此需要先获取POI的jar包,本实验使用的是POI 3.9稳定版.Apache POI 代 ...
- Java开发小技巧(六):使用Apache POI读取Excel
前言 在数据仓库中,ETL最基础的步骤就是从数据源抽取所需的数据,这里所说的数据源并非仅仅是指数据库,还包括excel.csv.xml等各种类型的数据接口文件,而这些文件中的数据不一定是结构化存储的, ...
- Java之POI读取Excel的Package should contain a content type part [M1.13]] with root cause异常问题解决
Java之POI读取Excel的Package should contain a content type part [M1.13]] with root cause异常问题解决 引言: 在Java中 ...
- POI读取Excel数据
POI读取Excel表格数据 * {所需相关jar下载: * commons-collections4-4.4.jar * commons-compress-1.19.jar * poi-4.1.1. ...
随机推荐
- C# == 和 Equals
先看一下解释 msdn对于 == 的解释: 对于预定义的值类型,如果操作数的值相等,则相等运算符 (==) 返回 true,否则返回 false. 对于 string 以外的引用类型,如果两个操作数引 ...
- startSSL 申请免费的SSL证书
打开网址https://www.startssl.com/?app=12,选择Sign-up注册. 输入个人注册信息 需注意以下几点:(1)地址必须详细,否则你会收到这样的邮件: Please pro ...
- 解决Ubuntu17.04以上系统,yarn init报错
安装yarn的时候老是装了个cmdtes的东西,官网是说删掉cmdtest重装就行,但是真没用. 正确的解决办法应该是像这位说的一样,先修改一下源,sudo apt update再下载,就能下载到真正 ...
- android sqlite批量插入数据速度解决方案
转自 http://hi.baidu.com/hfutonline/blog/item/62b1e4de8bdf4b2e5882dd28.html 最近在做android项目的时候遇到一个问题,应用程 ...
- A1001. A+B Format
Calculate a + b and output the sum in standard format -- that is, the digits must be separated into ...
- 【bzoj2038】小Z的袜子
莫队算法是一种针对询问进行分块的离线算法,如果已知区间 [ l , r ] 内的答案,并且可以在较快的时间内统计出区间 [ l-1, r ],[ l , r+1 ] 的答案,即可使用莫队算法. 莫队复 ...
- 收藏:FLASH中键检测与右键屏蔽
原文:http://space.flash8.net/space/?591172/viewspace-708726.html <!DOCTYPE html PUBLIC "-//W3C ...
- 2018.9青岛网络预选赛(C)
传送门:Problem C https://www.cnblogs.com/violet-acmer/p/9664805.html 题意: 定义五个指令,判断能否从输入的n条指令中成功跳出循环,如果不 ...
- 一个简单的加载动画,js实现
简单效果图: html: <div class="box"> <ul> <li></li> <li></li> ...
- DOJO常用的函数
DOJO常用的: 1,通过dojo.require以类似C编程中#include或者Java中import的方式加载所需的部件如dojo.require("dojo.parser" ...