java Poi导入exel表格的数据,入库

pom依赖 导入poi依赖

    <dependency>
            <groupId>org.apache.poi</groupId>
            <artifactId>poi</artifactId>
            <version>3.17</version>
        </dependency>
        <dependency>
            <groupId>org.apache.poi</groupId>
            <artifactId>poi-ooxml</artifactId>
            <version>3.17</version>
        </dependency>

工具类,里面也有main方法
注意:表格的列值,不同有的是整数,有的日期,有的是字符串‘
使用 row.getCell(0).setCellType(CellType.NUMERIC); 进行列格式设置
setCellType 自己点进去看类型把

package com.sxjlrj.common.util;
 
import java.io.File;
import java.io.FileInputStream;
import java.math.BigDecimal;
import java.util.*;


import com.sxjlrj.manager.censusManager.model.DtStatisticBusiness;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.apache.poi.ss.usermodel.*;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
 
public class ExcelUtil {
 
    public static void main(String[] args) {
        File file = new File("C:\\Users\\gaoyuan\\Desktop\\2017年太原(1).xls");
        // File file = new File("E:/2.xls");
        try {
            List<DtStatisticBusiness> list = importExcel(file);

        } catch (Exception e) {
            e.printStackTrace();
        }
    }
 
 
    public static List<DtStatisticBusiness> importExcel(File file) throws Exception {
        Workbook wb = null;
        String fileName = file.getName();// 读取上传文件(excel)的名字,含后缀后
        // 根据文件后缀名不同(xls和xlsx)获得不同的Workbook实现类对象
        Iterator<Sheet> sheets = null;
        List<DtStatisticBusiness> returnlist = new ArrayList<DtStatisticBusiness>();
        try {
            if (fileName.endsWith("xls")) {
                wb = new HSSFWorkbook(new FileInputStream(file));
                sheets = wb.iterator();
            } else if (fileName.endsWith("xlsx")) {
                wb = new XSSFWorkbook(new FileInputStream(file));
                sheets = wb.iterator();
            }
            if (sheets == null) {
                throw new Exception("excel中不含有sheet工作表");
            }


            // 遍历excel里每个sheet的数据。
            while (sheets.hasNext()) {

                Sheet sheet = sheets.next();
                String sheetName = sheet.getSheetName();

                //读Sheet2的数据
                if(sheetName.equals("2020")){
                    returnlist =getCellValue(sheet);
                }

            }
        } catch (Exception ex) {
            throw ex;
        } finally {
            if (wb != null) wb.close();
        }
        return returnlist;
    }
 
 
    // 获取每一个Sheet工作表中的数。
    private static List<DtStatisticBusiness> getCellValue(Sheet sheet) {
        List<DtStatisticBusiness> list = new ArrayList<DtStatisticBusiness>();
        // sheet.getPhysicalNumberOfRows():获取的是物理行数,也就是不包括那些空行(隔行)的情况
        for (int i = (sheet.getFirstRowNum()+1); i < sheet.getPhysicalNumberOfRows(); i++) {

            // 获得第i行对象
            Row row = sheet.getRow(i);

            if (row == null) {
                continue;
            } else {
                // getLastCellNum:获取列数(比最后一列列标大1)
                // 通常导入的excel是符合需求规范的,这里因为我们准备的excel列数是7列,如果小于7列说明传入的excel文件有问题。
                if (row.getLastCellNum() < 4) {
                    continue;
                }



                 //int j = row.getFirstCellNum();// 获取第i行第一个单元格的下标
                // 第一列=日期
                //判断头部
                if (row.getCell(0).getCellTypeEnum().equals(CellType.STRING)){
                    continue;
                }

				//封装数据
                DtStatisticBusiness dtStatisticBusiness = new DtStatisticBusiness();



                row.getCell(0).setCellType(CellType.NUMERIC);
                //row.getCell(j).setCellType(CellType.STRING);
                Date dateCellValue = row.getCell(0).getDateCellValue();

                if (StringUtil.isEmpty(dateCellValue)||dateCellValue.equals("总计")||dateCellValue.equals("日期")) {
                    continue;
                }
                dtStatisticBusiness.setReportDate(dateCellValue);
                //map.put("schoolName", schoolName);
                //第二列=运输起架次
                row.getCell(1).setCellType(CellType.STRING);
                String transportCell = row.getCell(1).getStringCellValue();
                if (StringUtil.isEmpty(transportCell)) {
                    continue;
                }
                dtStatisticBusiness.setTransportPre(new BigDecimal(transportCell));
                dtStatisticBusiness.setTransportRev(new BigDecimal(transportCell));
                //第三列=旅客吞吐量
                row.getCell(2).setCellType(CellType.STRING);
                String passengerCell = row.getCell(2).getStringCellValue();
                if (StringUtil.isEmpty(passengerCell)) {
                    continue;
                }
                BigDecimal passengerDivide = new BigDecimal(passengerCell).divide(new BigDecimal(10000));
                dtStatisticBusiness.setPassengerPre(passengerDivide);
                dtStatisticBusiness.setPassengerRev(passengerDivide);
                //第四列=货邮吞吐量
                row.getCell(3).setCellType(CellType.STRING);
                String cargoCell = row.getCell(3).getStringCellValue();
                if (StringUtil.isEmpty(cargoCell)) {
                    continue;
                }
                BigDecimal cargoDivide = new BigDecimal(cargoCell).divide(new BigDecimal(1000));
                dtStatisticBusiness.setCargoRev(cargoDivide);
                dtStatisticBusiness.setCargoPre(cargoDivide);

                list.add(dtStatisticBusiness);


               // System.out.println("日期="+dateCellValue+"运输起架次="+transportCell+"旅客吞吐量="+passengerCell+"货邮吞吐量="+cargoCell);
            /*    //map.put("name", name);
                Cell cell = row.getCell(j++);// 学号(在excel中,学号可能是纯数字,也可能是字母在数字)
                if (cell.getCellTypeEnum().equals(CellType.STRING)) {// 如果是字符串,直接获取值
                    map.put("sn", cell.getStringCellValue());
                } else if (cell.getCellTypeEnum().equals(CellType.NUMERIC)) {
                    // 如果excel中学号是纯数字,获取的值是数值类型,再toPlainString()转为字符类型,因为数据库中学号字段需要是字符类型。
                    map.put("sn", new BigDecimal(cell.getNumericCellValue()).toPlainString());
                }
 
                cell = row.getCell(j++);// 年级(数据库中,年级是int类型,所以这里我们转换为int)
                if (cell.getCellTypeEnum().equals(CellType.STRING)) {
                    try {
                        String gradeStr = cell.getStringCellValue();
                        //
                        int grade = Integer.parseInt(gradeStr);
                        map.put("grade", grade);
                    } catch (Exception e) {
                        continue;
                    }
                } else if (cell.getCellTypeEnum().equals(CellType.NUMERIC)) {
                    map.put("grade", (int) cell.getNumericCellValue());
                }
 
                cell = row.getCell(j++);// 班级(数据库中,年级是int类型,所以这里我们转换为int)
                if (cell.getCellTypeEnum().equals(CellType.STRING)) {
                    try {
                        String klassStr = cell.getStringCellValue();
                        int klass = Integer.parseInt(klassStr);
                        map.put("klass", klass);
                    } catch (Exception e) {
                        continue;
                    }
                } else {
                    map.put("klass", (int) cell.getNumericCellValue());
                }
 
                String genderStr = row.getCell(j++).getStringCellValue();
                int gender = "男".equals(genderStr) ? 1 : "女".equals(genderStr) ? 0 : 2;
                map.put("gender", gender);
 
                if (j <= row.getLastCellNum()) {
                    cell = row.getCell(j++);// 手机号
                    if (cell.getCellTypeEnum().equals(CellType.STRING))
                        map.put("phone", cell.getStringCellValue());
                    else if (cell.getCellTypeEnum().equals(CellType.NUMERIC)) map.put("phone",
                            new BigDecimal(cell.getNumericCellValue()).toPlainString());
                }
                list.add(map);*/
            }
        }
  return list;
    }
 
 
 
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值