POI导入Excel 解析各种格式单元格公共方法整理
2017-11-30 15:46
1266 查看
(可以解析文本、日期、数值、公式单元格、布尔、空值)
1、解析数值型保留两位小数,日期格式为yyyy-mm-dd以及公式型单元格/**
* 获取cell中的值
* @param cell
* @return
*/
private String getCellValue(HSSFCell cell) {
if (cell != null) {
String value = "";
switch (cell.getCellType()) {
case HSSFCell.CELL_TYPE_NUMERIC: // 数值型
DecimalFormat df = new DecimalFormat("#.##");
if (HSSFDateUtil.isCellDateFormatted(cell)) {
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
value = sdf.format(HSSFDateUtil.getJavaDate(cell.getNumericCellValue()));
// 如果是date类型则 ,获取该cell的date值
//value = HSSFDateUtil.getJavaDate(cell.getNumericCellValue()).toString();
} else { // 纯数字
value = df.format(cell.getNumericCellValue());
}
return value;
case HSSFCell.CELL_TYPE_STRING: // 字符串型
value = cell.getRichStringCellValue().toString();
return value;
case HSSFCell.CELL_TYPE_BOOLEAN: // 布尔
value = "" + cell.getBooleanCellValue();
return value;
case HSSFCell.CELL_TYPE_BLANK: // 空值
value = "";
case HSSFCell.CELL_TYPE_ERROR: // 故障
value = "";
return value;
case HSSFCell.CELL_TYPE_FORMULA:
//读公式计算值
/*value = String.valueOf(cell.getNumericCellValue());
if (value.equals("NaN")) {// 如果获取的数据值为非法值,则转换为获取字符串
value = cell.getStringCellValue().toString();
}
return value;*/
HSSFWorkbook wb = cell.getSheet().getWorkbook();
HSSFCreationHelper crateHelper = wb.getCreationHelper();
HSSFFormulaEvaluator evaluator = crateHelper.createFormulaEvaluator();
value = getCellValue(evaluator.evaluateInCell(cell));
return value;
default:
value = cell.getRichStringCellValue().toString();
return value;
}
}
return "";
}
2、解析数值型单元格,excel单元格中什么精度就保留什么精度;日期类型必须为yyyy-mm-dd,无论是日期格式还是文本格式。可以解析公式型单元格。/**
* 获取cell中的值
* @param cell
* @return
*/
private String getCellValue(XSSFCell cell) {
if (cell != null) {
String value = "";
switch (cell.getCellType()) {
case XSSFCell.CELL_TYPE_NUMERIC: // 数值型
//DecimalFormat df = new DecimalFormat("#.################");
if (DateUtil.isCellDateFormatted(cell)) {
//判断是否yyyy-mm-dd的格式
if(178==cell.getCellStyle().getDataFormat()){
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
value = sdf.format(DateUtil.getJavaDate(cell.getNumericCellValue()));
}else{
//String str = cell.getCellStyle().getDataFormatString();
SimpleDateFormat sdf = new SimpleDateFormat("yyyy/MM/dd");
value = sdf.format(DateUtil.getJavaDate(cell.getNumericCellValue()));
}
} else { // 纯数字
//value = df.format(cell.getNumericCellValue());
//此处不保留小数点,而是excel写多少就是多少
cell.setCellType(XSSFCell.CELL_TYPE_STRING);//无条件转为文本,迫不得已
value = cell.getRichStringCellValue().toString();
}
return value;
case XSSFCell.CELL_TYPE_STRING: // 字符串型
value = cell.getRichStringCellValue().toString();
return value;
case XSSFCell.CELL_TYPE_BOOLEAN: // 布尔
value = "" + cell.getBooleanCellValue();
return value;
case XSSFCell.CELL_TYPE_BLANK: // 空值
value = "";
case XSSFCell.CELL_TYPE_ERROR: // 故障
value = "";
return value;
case XSSFCell.CELL_TYPE_FORMULA:
//读公式计算值
/*value = String.valueOf(cell.getNumericCellValue());
if (value.equals("NaN")) {// 如果获取的数据值为非法值,则转换为获取字符串
value = cell.getStringCellValue().toString();
}
return value;*/
XSSFWorkbook wb = cell.getSheet().getWorkbook();
XSSFCreationHelper crateHelper = wb.getCreationHelper();
XSSFFormulaEvaluator evaluator = crateHelper.createFormulaEvaluator();
value = getCellValue(evaluator.evaluateInCell(cell));
return value;
default:
value = cell.getRichStringCellValue().toString();
return value;
}
}
return "";
}
欢迎指正!
相关文章推荐
- Java中Excel导入功能实现、excel导入公共方法_POI -
- Java中Excel导入功能实现、excel导入公共方法_POI -
- android studio 解析Excel数据格式导入poi-3.17.jar时的一系列报错及处理Failed resolution of: Ljavax/xml/stream/XMLEventFactory,duplicate entry: org/apache/xmlbeans/xml/stream/Location.class,GC overhead limit exceeded
- POI使用:用poi接口不区分xls/xlsx格式解析Excel文档(41种日期格式解析方法,5种公式结果类型解析方法,3种常用数值类型精度控制办法)
- POI使用:用poi接口不区分xls/xlsx格式解析Excel文档(41种日期格式解析方法,5种公式结果类型解析方法,3种常用数值类型精度控制办法)
- POI导入Excel的公共方法
- POI设置EXCEL单元格格式为文本、小数、百分比、货币、日期、科学计数法和中文大写
- POI设置EXCEL单元格格式为文本、小数、百分比、货币、日期、科学计数法和中文大写
- poi解析excel导入MySQL数据库
- 导入EXCEL报错:"外部表不是预期的格式错误"、文件格式和扩展名不匹配,文件可能已损坏或不安全的解决方法
- POI中设置Excel单元格格式
- POI中可能会用到一些需要设置EXCEL单元格格式的操作小结:
- 详讲:C#快速导出多个sheet到excel的两种方法(Cell和Range方法), 解决了(导入时外部表不是预期的格式)
- POI中可能会用到一些需要设置EXCEL单元格格式的操作小结
- 【JAVA】apache poi excel 文件读取,各种数据类型,不规则excel格式都可以读取
- 使用poi导入导出excel文件方法使用及改进
- POI设置EXCEL单元格的"条件格式"
- poi导出Excel的一个公共方法(Struts1)
- 通过Navicat向MySQL导入Excel文件格式数据的方法及遇到的问题
- SSH框架下导入excel,POI解析导入MySql