springboot使用POI读取excel数据

MAVEN坐标如下:

springboot使用POI读取excel数据_第1张图片

便于复制:



    org.apache.poi
    poi
    3.17



    org.apache.poi
    poi-ooxml
    3.17

注意:第二个坐标是使用POI读取excel数据的时候分2003和2007的版本,不加这个坐标是没有XSSFWorkbook类的

xls使用HSSFWorkbook     xlsx使用XSSFWorkbook

前台:

因为我需要导出数据的时候检查内容,需要回调,所有不能直接提交表单

springboot使用POI读取excel数据_第2张图片

function  getExcel() {
    var formData = new FormData($("#excelForm")[0]);
    $.ajax({
        url: '/batch/importexcel',
        type: 'POST',
        data: formData,
        cache: false,
        dataType: "json", //预期服务器返回的数据类型
        //注意这里一定要设置contentType:false,不然会默认为传的是字符串,这样文件就传不过去了
        contentType: false,
        processData: false,
        success: function (data) {
            alert(data);
        },
        error: function (data) {
            alert(data.msg);
        }
    });
}

springboot后台接收以及逻辑如下:

if (file == null) {
    //代表没有文件
    return "0";
}
if (file.getOriginalFilename() != null && !"".equals(file.getOriginalFilename())) {
    String filename = file.getOriginalFilename();
    //excel2003
    if (filename.split("\\.")[1].equals("xls")) {
        try {
            //POI导入文件,存放到list集合
            HSSFWorkbook workbook = new HSSFWorkbook(new POIFSFileSystem(file.getInputStream()));
            //意思是有几个文件,一个excel可能有多个sheet,这里只读取第一个
            int sheets = workbook.getNumberOfSheets();
            //只读取第一个sheet
            HSSFSheet sheetAt = workbook.getSheetAt(0);
            //这个表示当前sheet有多少行数据,一行一行读取就行
            int rows = sheetAt.getPhysicalNumberOfRows();
            for (int i = 0; i < rows; i++) {
                Batch batch = new Batch();
                //某一行的数据,是一行一行的读取
                HSSFRow row = sheetAt.getRow(i);
                String value = row.getCell(1).getStringCellValue();
                System.out.println(value);


            }
        } catch (RuntimeException e) {

        }
        //excel2007
    } else if (filename.split("\\.")[1].equals("xlsx")) {
        //POI导入文件,存放到list集合
        try {
            XSSFWorkbook workbook = new XSSFWorkbook(file.getInputStream());
            //意思是有几个文件,一个excel可能有多个sheet,这里只读取第一个
            int sheets = workbook.getNumberOfSheets();
            //只读取第一个sheet
            XSSFSheet sheetAt = workbook.getSheetAt(0);
            //这个表示当前sheet有多少行数据,一行一行读取就行,但是会把没有数据的行读出来,需要加异常处理
            int rows = sheetAt.getPhysicalNumberOfRows();
            for (int i = 0; i < rows; i++) {
                if (i == 0) {
                    continue;
                }
                //某一行的数据,是一行一行的读取
                XSSFRow row = sheetAt.getRow(i);
                String productid = "";
                String date = "";
                String batchStr = "";
                String number = "";
                String manufactname = "";
                String identifier = "";
                String mark = "";
                try {
                    productid = row.getCell(0).getStringCellValue();
                } catch (RuntimeException e) {
                    double values = row.getCell(0).getNumericCellValue();
                    productid = values + "";
                }
                try {
                    date = row.getCell(1).getStringCellValue();
                } catch (Exception e) {
                    double dates = row.getCell(1).getNumericCellValue();
                    date = dates + "";
                }
                try {
                    batchStr = row.getCell(2).getStringCellValue();
                } catch (Exception e) {
                    double batchStrs = row.getCell(2).getNumericCellValue();
                    batchStr = batchStrs + "";
                }
                try {
                    number = row.getCell(3).getStringCellValue();
                } catch (Exception e) {
                    double numbers = row.getCell(3).getNumericCellValue();
                    number = numbers + "";
                }
                try {
                    manufactname = row.getCell(4).getStringCellValue();
                } catch (Exception e) {
                    double manufactnames = row.getCell(4).getNumericCellValue();
                    manufactname = manufactnames + "";
                }
                try {
                    identifier = row.getCell(5).getStringCellValue();
                } catch (Exception e) {
                    double identifiers = row.getCell(5).getNumericCellValue();
                    identifier = identifiers + "";
                }
                try {
                    mark = row.getCell(6).getStringCellValue();
                } catch (Exception e) {
                    double marks = row.getCell(6).getNumericCellValue();
                    mark = marks + "";
                }
                //productid  date   batchStr    number  manufactname    identifier  mark
                System.out.println(productid + "---" + date + "---" + batchStr + "---" + number + "---" + manufactname + "---" + identifier + "---" + mark);


            }
        } catch (RuntimeException e) {
            return "2";
        }

    }
} else {
    return "1";
}

return "2";

主要看逻辑就行,其他的代码可以忽略

控制台打印如下:

springboot使用POI读取excel数据_第3张图片

你可能感兴趣的:(新手的成长)