java读取excel文件中的数据
2017-07-27 18:05
357 查看
private static List<List<List<String>>> readExcelXlsx(InputStream is) throws IOException{
String result_s = "";
//result用来存放从Excel中读取到的数据
List<List<List<String>>> result = new ArrayList<List<List<String>>>();
//获得excel文件的IO流
//InputStream is = new FileInputStream(file);
//得到后缀为.xlsx的excel对象
XSSFWorkbook xssfWorkbook = new XSSFWorkbook(is);
XSSFFormulaEvaluator evaluator = new XSSFFormulaEvaluator(xssfWorkbook);
//读取每一页
for(XSSFSheet xssfSheet : xssfWorkbook){
//resultSheet存放每一页的数据
List<List<String>> resultSheet = new ArrayList<List<String>>();
if(xssfSheet == null){
continue;
}
//读取每一行
for(int rowNum = 0; rowNum <= xssfSheet.getLastRowNum(); rowNum++){
//得到行对象
XSSFRow xssfRow = xssfSheet.getRow(rowNum);
//rowList存放每一行的数据
List<String> resultRow = new ArrayList<String>();
if(xssfRow == null){
continue;
}
//最小列索引
int minColIx = xssfRow.getFirstCellNum();
//最大列索引
int maxColIx = xssfRow.getLastCellNum();
//读取每一格
for(int colIx = minColIx; colIx <= maxColIx; colIx++){
//得到格对象
XSSFCell cell = xssfRow.getCell(colIx);
if(cell == null){
//保证结构固定
resultRow.add("");
continue;
}
//设置每个表格的类型为String
//cell.setCellType(Cell.CELL_TYPE_STRING);
//将得到的每一格的值插入到resultRow
//resultRow.add(cell.toString());
//LIUHONGYU 获取表格里的值
result_s = getValue(cell,evaluator);
resultRow.add(result_s);
}
//将读取到的每一行插入到resultSheet
resultSheet.add(resultRow);
}
//将读取到的每一页插入到result
result.add(resultSheet);
}
return result;
}
/**
* LIUHONGYU 获取表格中的值
* @param cell
* @param evaluator
* @return
*/
private static String getValue(XSSFCell cell,
XSSFFormulaEvaluator evaluator) {
String result = new String();
switch (cell.getCellType()) {
case HSSFCell.CELL_TYPE_NUMERIC:// 数字类型
if (HSSFDateUtil.isCellDateFormatted(cell)) {// 处理日期格式、时间格式
SimpleDateFormat sdf = null;
if (cell.getCellStyle().getDataFormat() == HSSFDataFormat
.getBuiltinFormat("h:mm")) {
sdf = new SimpleDateFormat("HH:mm");
} else {// 日期
sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm");
}
Date date = cell.getDateCellValue();
result = sdf.format(date);
} else if (cell.getCellStyle().getDataFormat() == 58) {
// 处理自定义日期格式:m月d日(通过判断单元格的格式id解决,id的值是58)
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
double value = cell.getNumericCellValue();
Date date = org.apache.poi.ss.usermodel.DateUtil
.getJavaDate(value);
result = sdf.format(date);
} else {
HSSFDataFormatter dataFormatter = new HSSFDataFormatter();
result = dataFormatter.formatCellValue(cell);
}
break;
case HSSFCell.CELL_TYPE_FORMULA://LIUHONGYU 2017/6/19
CellValue cellValue = evaluator.evaluate(cell);
double cv = cellValue.getNumberValue();
DecimalFormat df = new DecimalFormat("#.###");
result=df.format(cv);
break;
case HSSFCell.CELL_TYPE_STRING:// String类型
result = cell.getRichStringCellValue().toString();
break;
case HSSFCell.CELL_TYPE_BLANK:
result = "";
default:
result = "";
break;
}
return result;
}
String result_s = "";
//result用来存放从Excel中读取到的数据
List<List<List<String>>> result = new ArrayList<List<List<String>>>();
//获得excel文件的IO流
//InputStream is = new FileInputStream(file);
//得到后缀为.xlsx的excel对象
XSSFWorkbook xssfWorkbook = new XSSFWorkbook(is);
XSSFFormulaEvaluator evaluator = new XSSFFormulaEvaluator(xssfWorkbook);
//读取每一页
for(XSSFSheet xssfSheet : xssfWorkbook){
//resultSheet存放每一页的数据
List<List<String>> resultSheet = new ArrayList<List<String>>();
if(xssfSheet == null){
continue;
}
//读取每一行
for(int rowNum = 0; rowNum <= xssfSheet.getLastRowNum(); rowNum++){
//得到行对象
XSSFRow xssfRow = xssfSheet.getRow(rowNum);
//rowList存放每一行的数据
List<String> resultRow = new ArrayList<String>();
if(xssfRow == null){
continue;
}
//最小列索引
int minColIx = xssfRow.getFirstCellNum();
//最大列索引
int maxColIx = xssfRow.getLastCellNum();
//读取每一格
for(int colIx = minColIx; colIx <= maxColIx; colIx++){
//得到格对象
XSSFCell cell = xssfRow.getCell(colIx);
if(cell == null){
//保证结构固定
resultRow.add("");
continue;
}
//设置每个表格的类型为String
//cell.setCellType(Cell.CELL_TYPE_STRING);
//将得到的每一格的值插入到resultRow
//resultRow.add(cell.toString());
//LIUHONGYU 获取表格里的值
result_s = getValue(cell,evaluator);
resultRow.add(result_s);
}
//将读取到的每一行插入到resultSheet
resultSheet.add(resultRow);
}
//将读取到的每一页插入到result
result.add(resultSheet);
}
return result;
}
/**
* LIUHONGYU 获取表格中的值
* @param cell
* @param evaluator
* @return
*/
private static String getValue(XSSFCell cell,
XSSFFormulaEvaluator evaluator) {
String result = new String();
switch (cell.getCellType()) {
case HSSFCell.CELL_TYPE_NUMERIC:// 数字类型
if (HSSFDateUtil.isCellDateFormatted(cell)) {// 处理日期格式、时间格式
SimpleDateFormat sdf = null;
if (cell.getCellStyle().getDataFormat() == HSSFDataFormat
.getBuiltinFormat("h:mm")) {
sdf = new SimpleDateFormat("HH:mm");
} else {// 日期
sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm");
}
Date date = cell.getDateCellValue();
result = sdf.format(date);
} else if (cell.getCellStyle().getDataFormat() == 58) {
// 处理自定义日期格式:m月d日(通过判断单元格的格式id解决,id的值是58)
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
double value = cell.getNumericCellValue();
Date date = org.apache.poi.ss.usermodel.DateUtil
.getJavaDate(value);
result = sdf.format(date);
} else {
HSSFDataFormatter dataFormatter = new HSSFDataFormatter();
result = dataFormatter.formatCellValue(cell);
}
break;
case HSSFCell.CELL_TYPE_FORMULA://LIUHONGYU 2017/6/19
CellValue cellValue = evaluator.evaluate(cell);
double cv = cellValue.getNumberValue();
DecimalFormat df = new DecimalFormat("#.###");
result=df.format(cv);
break;
case HSSFCell.CELL_TYPE_STRING:// String类型
result = cell.getRichStringCellValue().toString();
break;
case HSSFCell.CELL_TYPE_BLANK:
result = "";
default:
result = "";
break;
}
return result;
}
相关文章推荐
- JXL 读取 Excel java中jxl导出数据到excel的例子 上传文件
- 【JAVA】apache poi excel 文件读取,各种数据类型,不规则excel格式都可以读取
- java读取excel文件获取数据
- Java读取Excel文件中的数据
- Java读取、写入、处理Excel文件中的数据
- 用 java 读取excel 文件里的时间格式数据时,24时制会自动转化为12时制,解决办法 .
- Java 读取excel指定行列数据以及将数据保存到txt文件中
- Java, 如何从Excel中读取数据到文件中
- 《Java开发有一说一》——Java读取Excel文件中的数据
- java读取Excel数据,然后写入到txt文件,并批量保存到oracle数据库中
- 使用JAVA读取EXCEL文件里面的数据
- 【JAVA】apache poi excel 文件读取,各种数据类型,不规则excel格式都可以读取
- Java读取、写入、处理Excel文件中的数据
- 用 java 读取excel 文件里的时间格式数据时,24时制会自动转化为12时制,解决办法
- JXL 读取 Excel java中jxl导出数据到excel的例子 上传文件
- java读取excel文件数据
- 将后台数据读取到前台的EXCEL文件中去,用javascript实现,asp.net,javacript(发一个原创)
- Java怎样从Excel文件中读取数据
- Java数据导入功能之读取Excel文件实例
- 用 java 读取excel 文件里的时间格式数据时,24时制会自动转化为12时制,解决办法