这两天因项目需要(就是锻炼你),让我们自己研究下poi与excel表格之间的操作!发博让小伙伴们少一点坑
1.首先,先了解下poi,可以自己去百度。这里不详细多说!
Workbook //excel对象,下面两个都继承他(没错的话)
XSSFWorkbook //07以上版本的excel(.xlsx)
HSSFWorkbook //03版本的excel(.xls)
①先说一下怎么导入excel表格的数据到数据库
<form action="***" method="post" enctype='multipart/form-data'> //enctype 只有声明这个属性,浏览器才会认为你上传是一个文件类型的数据
②在controller后台接收文件的时候也是有固定的参数
@RequestParam("提交表单的input名字") CommonsMultipartFile file //需要在controller方法的参数里写 这里声明前台传过来的文件名字为file
③解决了前后台的数据交互问题就可以正式来解析数据,进行导入到数据库的操作
InputStream out=file.getInputStream(); //先获取文件的输入流
Workbook hwb = WorkbookFactory.create(fis); //创建对应输入流文件的excel对象
for(int i;i<hwb.getNumberOfSheets(); i++) { //getNumberOfSheets是获取对象中的所有表格数量
Sheet sheet = hwb.getSheetAt(i); //创建,并获取表格的对象
for (int j = 0; j < sheet.getPhysicalNumberOfRows(); j++) { //getPhysicalNumberOfRows 是获取表格中的所有的物理行数
Row row = sheet.getRow(j); //获取到单行的对象,这里可以根据row.getCell(0) 根据索引位置去获取到每一个单元格的对象的值
String name= GetCellValue.getCellValue(row.getCell(0)); //然后赋值给实体类对象,去进行增加到数据库的操作
//如果遇到时间类型,直接转换就可以了,因为在工具类已经判断给转换成String类型,需要你把String在转成Date类型的
}
}
③.②因为表格中的内容可能多种多样,这里需要去判断都才能取出来这里直接做成一个工具类
package mvct.tool; import java.text.DecimalFormat; import java.text.SimpleDateFormat; import org.apache.poi.hssf.usermodel.HSSFCell; import org.apache.poi.ss.usermodel.Cell; import org.apache.poi.ss.usermodel.DateUtil; public class GetCessValue { // 判断从Excel文件中解析出来数据的格式,并转成String类型返回 public static String getCellValue(Cell cell) { DecimalFormat df = new DecimalFormat("#"); String value = null; // 简单的查检列类型 switch (cell.getCellType()) { case Cell.CELL_TYPE_STRING:// 字符串类型 value = cell.getRichStringCellValue().getString(); break; // 数值类型 case Cell.CELL_TYPE_NUMERIC: if (DateUtil.isCellDateFormatted(cell)) { SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); value = sdf.format(DateUtil.getJavaDate(cell.getNumericCellValue())); break; } value= df.format(cell.getNumericCellValue()); break; case HSSFCell.CELL_TYPE_BLANK: // 空值类型 value = ""; break; case Cell.CELL_TYPE_FORMULA: // 公式 value = String.valueOf(cell.getCellFormula()); break; case Cell.CELL_TYPE_BOOLEAN:// boolean型值 value = String.valueOf(cell.getBooleanCellValue()); break; case Cell.CELL_TYPE_ERROR: // 异常类型 value = String.valueOf(cell.getErrorCellValue()); break; default: break; } return value; } }
关于数据的下载明天抽空在写!