把电子表格通过poi用流的方式导入数据,不存储文件,支xls和xlsx

40 阅读1分钟

import org.apache.poi.hssf.usermodel.HSSFCell;
import org.apache.poi.hssf.usermodel.HSSFRow;
import org.apache.poi.hssf.usermodel.HSSFSheet;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.apache.poi.xssf.usermodel.XSSFCell;
import org.apache.poi.xssf.usermodel.XSSFRow;
import org.apache.poi.xssf.usermodel.XSSFSheet;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;

import org.springframework.web.multipart.MultipartFile;


/**
 * 导入数据
 *
 * @param request
 * @return
 */
@RequestMapping(value = "/importData", produces = "application/json;charset=UTF-8")
public Map<String, Object> importData(@RequestParam(value = "impFile", required = false) MultipartFile attach, HttpServletRequest request) {

    int num = readExcel(attach);

    Map<String, Object> outMap = new HashMap<>();
    if (num > 0) {
        outMap.put("success", true);
        outMap.put("msg", "导入成功!");
    } else {
        outMap.put("success", false);
        outMap.put("msg", "导入失败!");
    }

    return outMap;
}

public int readExcel(MultipartFile attach) {

    String oldFileName = attach.getOriginalFilename();

    int last = oldFileName.lastIndexOf(".");
    String type = oldFileName.substring(last + 1);

    int result = 0;
    if ("xls".equals(type)) {
        result = readXls(attach);
    } else if ("xlsx".equals(type)) {
        result = readXlsx(attach);
    }

    return result;
}

public int readXls(MultipartFile attach) {

    HSSFWorkbook workbook = null;
    try {
        workbook = new HSSFWorkbook(attach.getInputStream());
    } catch (IOException e) {
        e.printStackTrace();
    }

    int num = 0;

    if (!(workbook == null)) {
        HSSFSheet sheet = workbook.getSheetAt(0);
        int rows = sheet.getLastRowNum();// 总行数

        for (int a = 0; a <= rows; a++) {
            HSSFRow row = sheet.getRow(a);
            int cells = row.getLastCellNum();

            SeatPerson person = new SeatPerson();
            person.setId(UUIDGenerator.getId());

            for (int b = 0; b < cells; b++) {
                HSSFCell cell = row.getCell(b);
                if (!(cell == null)) {
                    String result = cell.toString();
                    switch (b) {
                        case 0:
                            person.setPersonName(result);
                            break;
                        case 1:
                            person.setIdno(result);
                            break;
                        case 2:
                            person.setPersonCategory(result);
                            break;
                        case 3:
                            person.setPersonDuty(result);
                            break;
                        case 4:
                            person.setPersonSort((int) Double.parseDouble(result));
                            break;
                        default:
                            break;
                    }
                }
            }
            num += seatPersonService.insertSeatPerson(person);
        }
    }

    return num;
}

public int readXlsx(MultipartFile attach) {

    XSSFWorkbook workbook = null;
    try {
        workbook = new XSSFWorkbook(attach.getInputStream());
    } catch (IOException e) {
        e.printStackTrace();
    }

    int num = 0;

    if (!(workbook == null)) {
        XSSFSheet sheet = workbook.getSheetAt(0);
        int rows = sheet.getLastRowNum();

        for (int a = 0; a <= rows; a++) {
            XSSFRow row = sheet.getRow(a);
            int cells = row.getLastCellNum();

            SeatPerson person = new SeatPerson();
            person.setId(UUIDGenerator.getId());

            for (int b = 0; b < cells; b++) {
                XSSFCell cell = row.getCell(b);
                if (!(cell == null)) {
                    String result = cell.toString();
                    switch (b) {
                        case 0:
                            person.setPersonName(result);
                            break;
                        case 1:
                            person.setIdno(result);
                            break;
                        case 2:
                            person.setPersonCategory(result);
                            break;
                        case 3:
                            person.setPersonDuty(result);
                            break;
                        case 4:
                            person.setPersonSort((int) Double.parseDouble(result));
                            break;
                        default:
                            break;
                    }
                }
            }
            num += seatPersonService.insertSeatPerson(person);
        }
    }

    return num;
}