java使用poi读取ecxel文件的工具类
2017-09-15 11:37
302 查看
导入jar包
poi-3.8-20120326.jar
poi-examples-3.8-20120326.jar
poi-excelant-3.8-20120326.jar
poi-ooxml-3.8-20120326.jar
poi-ooxml-schemas-3.8-20120326.jar
poi-scratchpad-3.8-20120326.jar
xmlbeans-2.3.0.jar
/**
* 读取excel文件并转换成list 空行不会被存到list数据已key等于列数value等于值的形式存到map行和列都是从0开始
*
* @param file
* 要读取的excel文件
*
* @param header
* 表头所占用行数 0表示无表头
*
* @param sheetNum
* 要读取excel的第几张表
*
* @return
*/
public static List<Map<Integer, String>> excelToList(File file, int headerNum, int sheetNum) {
try {
// 把所有读取到的数据存到一个list
List<Map<Integer, String>> list = new ArrayList<Map<Integer, String>>();
// 把单行数据存到一个map
Map<Integer, String> map = null;
// 定义一个变量来记录此行是否为空行大于0表示此行有数据否则不会存到list
int checkRow = 0;
InputStream is = new FileInputStream(file);
Workbook workbook = null;
// 通过后缀来判断要是用的Workbook,xls是2003,xlsx是2007
if ("xlsx".equals(StringUtil.getFileExt(file.getName()))) {
workbook = new XSSFWorkbook(is);
} else {
workbook = new HSSFWorkbook(is);
}
// 得到第一个shell
Sheet sheet = workbook.getSheetAt(sheetNum);
// 得到Excel的行数
int totalRows = sheet.getPhysicalNumberOfRows();
int totalCells = 0;
// 得到Excel的列数
if (totalRows >= 1 && sheet.getRow(0) != null) {
totalCells = sheet.getRow(0).getPhysicalNumberOfCells();
}
Row row = null;
Cell cell = null;
StringBuffer value = new StringBuffer("");
// 循环Excel的行
for (int r = 0; r < totalRows; r++) {
row = sheet.getRow(r);
if (row == null) {
continue;
}
map = new LinkedHashMap<Integer, String>();
// 跳过表头
if (r >= headerNum) {
// 循环Excel的列
for (int c = 0; c < totalCells; c++) {
cell = row.getCell(c);
// 值为null时转换成空字符
if (String.valueOf(cell) != null) {
// 防止数字自然数格式读取
switch (cell.getCellType()) {
case HSSFCell.CELL_TYPE_NUMERIC: // 数字
DecimalFormat format = new DecimalFormat("0");
value = new StringBuffer(format.format(cell.getNumericCellValue()).replaceAll("\\s*|\t|\r|\n", ""));
break;
case HSSFCell.CELL_TYPE_STRING: // 字符串
value = new StringBuffer(String.valueOf(cell).replaceAll("\\s*|\t|\r|\n", ""));
break;
}
} else {
value = new StringBuffer("");
}
map.put(c, value + "");
if (!"".equals(value) && (value != null) && (value.length() != 0)) {
checkRow++;
}
// 存完一列数据清空value以免空列无法更新value
value = new StringBuffer("");
}
// checkRow大于表示此行有数据需要存到list
if (checkRow > 0) {
list.add(map);
// 重置list来记录下一行是否为空行
checkRow = 0;
}
}
}
return list;
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
poi-3.8-20120326.jar
poi-examples-3.8-20120326.jar
poi-excelant-3.8-20120326.jar
poi-ooxml-3.8-20120326.jar
poi-ooxml-schemas-3.8-20120326.jar
poi-scratchpad-3.8-20120326.jar
xmlbeans-2.3.0.jar
/**
* 读取excel文件并转换成list 空行不会被存到list数据已key等于列数value等于值的形式存到map行和列都是从0开始
*
* @param file
* 要读取的excel文件
*
* @param header
* 表头所占用行数 0表示无表头
*
* @param sheetNum
* 要读取excel的第几张表
*
* @return
*/
public static List<Map<Integer, String>> excelToList(File file, int headerNum, int sheetNum) {
try {
// 把所有读取到的数据存到一个list
List<Map<Integer, String>> list = new ArrayList<Map<Integer, String>>();
// 把单行数据存到一个map
Map<Integer, String> map = null;
// 定义一个变量来记录此行是否为空行大于0表示此行有数据否则不会存到list
int checkRow = 0;
InputStream is = new FileInputStream(file);
Workbook workbook = null;
// 通过后缀来判断要是用的Workbook,xls是2003,xlsx是2007
if ("xlsx".equals(StringUtil.getFileExt(file.getName()))) {
workbook = new XSSFWorkbook(is);
} else {
workbook = new HSSFWorkbook(is);
}
// 得到第一个shell
Sheet sheet = workbook.getSheetAt(sheetNum);
// 得到Excel的行数
int totalRows = sheet.getPhysicalNumberOfRows();
int totalCells = 0;
// 得到Excel的列数
if (totalRows >= 1 && sheet.getRow(0) != null) {
totalCells = sheet.getRow(0).getPhysicalNumberOfCells();
}
Row row = null;
Cell cell = null;
StringBuffer value = new StringBuffer("");
// 循环Excel的行
for (int r = 0; r < totalRows; r++) {
row = sheet.getRow(r);
if (row == null) {
continue;
}
map = new LinkedHashMap<Integer, String>();
// 跳过表头
if (r >= headerNum) {
// 循环Excel的列
for (int c = 0; c < totalCells; c++) {
cell = row.getCell(c);
// 值为null时转换成空字符
if (String.valueOf(cell) != null) {
// 防止数字自然数格式读取
switch (cell.getCellType()) {
case HSSFCell.CELL_TYPE_NUMERIC: // 数字
DecimalFormat format = new DecimalFormat("0");
value = new StringBuffer(format.format(cell.getNumericCellValue()).replaceAll("\\s*|\t|\r|\n", ""));
break;
case HSSFCell.CELL_TYPE_STRING: // 字符串
value = new StringBuffer(String.valueOf(cell).replaceAll("\\s*|\t|\r|\n", ""));
break;
}
} else {
value = new StringBuffer("");
}
map.put(c, value + "");
if (!"".equals(value) && (value != null) && (value.length() != 0)) {
checkRow++;
}
// 存完一列数据清空value以免空列无法更新value
value = new StringBuffer("");
}
// checkRow大于表示此行有数据需要存到list
if (checkRow > 0) {
list.add(map);
// 重置list来记录下一行是否为空行
checkRow = 0;
}
}
}
return list;
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
相关文章推荐
- java使用POI工具读取word文档并写入生成新的word文档及错误整理
- 使用poi Java封装对Excel内容的读取,支持合并列形式
- java中使用POI导入excel数据的过程中,遇到读取以科学计数法显示的数据
- java使用POI读取properties文件并写到Excel的方法
- java使用poi读取excel内容方法实例
- java 使用工具读取Excel文件
- java使用POI 读取excel2010文件 并存入oracle数据库
- JAVA使用POI读取EXCEL文件的简单model
- java使用poi读取xls格式和xlsx格式的excel文件
- java使用poi读取ppt文件和poi读取excel、word示例
- 使用Java的POI工具进行Word的DOC文档转为HTML页面技术简介
- 解决Java读取properties文件的中文问题的新办法(不使用native2ascii.exe及其他工具)
- Java使用poi读取Excel文件例子
- java使用poi读取doc和docx文件
- 使用Apache的POI工具读取WORD文件...
- java使用poi读取ppt文件和poi读取excel、word示例
- idea工具下使用Java读取配置文件的方式
- 2014年2月20日 excel 工具 POI 的使用小记 java 的单例模式回顾 记忆
- java使用POI实现excel文件的读取,兼容后缀名xls和xlsx
- java使用poi读取ppt文件和poi读取excel、word示例