这两天因项目需要(就是锻炼你),让我们自己研究下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;
    }

}

关于数据的下载明天抽空在写!

posted @ 2017-09-29 16:15  皇后  阅读(250)  评论(0编辑  收藏  举报