将excel中的数据导入到数据库中进行存储

复制代码
/**
 * excel表中的数据添加进sql中的工具类
 */
 public List<Object> getPage(MultipartFile multipartFile, int num) throws IOException {
        List<Object> listPage = new ArrayList<>();
        InputStream in = null;
        try {
            //将file转InputStream
            in = multipartFile.getInputStream();
        } catch (IOException e) {
            e.printStackTrace();
        }
        //从给定文件创建相应的HSSFWorkbook/XSSF工作簿
        Workbook workbook = WorkbookFactory.create(in);
        //返回一个对象用来实例化Workbook的工具类,创建FormulaEvaluator-计算公式单元格的对象
        FormulaEvaluator evaluator = workbook.getCreationHelper().createFormulaEvaluator();
        //获取表格的第num页
        Sheet sheetAt = workbook.getSheetAt(num);
        //获取该页表格有多少的数据(通过统计最后一行的行数来计算有多少的数据)
        int lastRowNum = sheetAt.getLastRowNum();
        listPage.add(sheetAt);
        listPage.add(lastRowNum);

        in.close();
        workbook.close();
        return listPage;
    }
复制代码

在将excel中的数据导入到数据库的过程中,最重要的一点就是数据转换,需要将excel中拿出来的表转换为合适的数据格式,否则在导入的过程中会报数据格式转换异常。

例如

复制代码
 /**
     * 将表中的字符串类型的数据转换为string类型进行存储
     *
     * @param cell
     * @return
     */
    public String stringValue(Cell cell) {
        cell.setCellType(CellType.STRING);
        String stringCellValue = cell.getStringCellValue();
        return stringCellValue;
    }


    /**
     * 将表中的数值类型的数据转换为字符串类型进行存储
     *
     * @param cell
     * @return
     */
    public String bigdecimalStringValue(Cell cell) {

        BigDecimal bigDecimal = new BigDecimal(cell.getNumericCellValue()).setScale(4, BigDecimal.ROUND_HALF_UP);
        String string = bigDecimal.toString();
        return string;
    }
/**
     * 将表中的数字类型转换为整型进行存储
     *
     * @param cell
     * @return
     */
    public Long longValue(Cell cell) {
        double numericCellValue = cell.getNumericCellValue();
        Long value = Math.round(numericCellValue);
        return value;
    }
复制代码
复制代码

/**
 * 拿取数据,循环遍历,开始insert到数据库中
 */

@Override
public List<OrganizationSummary> getExcelPageData(MultipartFile multipartFile) throws IOException { num = 0; List<Object> listPage = iSysExcelToSqlUtil.getPage(multipartFile, num); //获取表格的第1页 sheetAt = (Sheet) listPage.get(0); //获取该页表格有多少的数据(通过统计最后一行的行数来计算有多少的数据) lastRowNum = (int) listPage.get(1); List<OrganizationSummary> list = new ArrayList<>(); //从第6行开始遍历循环,获取所有的数据 for (int i = 5; i <= lastRowNum; i++) { Row row = sheetAt.getRow(i); if (row != null) { //获取单元格最后一个单元格 short lastCellNum = row.getLastCellNum(); //循环遍历单元格,获取单元格的数据 cell = row.getCell(0); //拿出来表格的第1个,判断内容,如果匹配则跳出本次循环 if (cell.getStringCellValue().equals("长春城区") || cell.getStringCellValue().equals("长春外县") || cell.getStringCellValue().equals("二级分行")) { value = cell.getStringCellValue(); continue; } else { OrganizationSummary os = new OrganizationSummary(); for (int j = 0; j < lastCellNum; j++) { cell = row.getCell(j); cell.setCellType(CellType.STRING); String stringCellValue = cell.getStringCellValue(); switch (j) { case 0: os.setOrganizationSummaryName(stringCellValue); break; case 1: os.setEquipmentNum(Long.valueOf(stringCellValue)); break; case 2: BigDecimal bigDecimal; try { bigDecimal = new BigDecimal(stringCellValue); } catch (Exception e) { bigDecimal = BigDecimal.ZERO; } os.setDailyAverage(bigDecimal.setScale(0, BigDecimal.ROUND_HALF_UP).toString()); break; } os.setOrganizationCityProper(value); } list.add(os); } } } return list; }
复制代码

 

posted @   小样儿i  阅读(685)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· 提示词工程——AI应用必不可少的技术
· Open-Sora 2.0 重磅开源!
点击右上角即可分享
微信分享提示