excel文件导出和导入

pom.xml添加依赖

@RestController
@RequestMapping(value = "/excel")
public class ExpImpExcelController {

    // 导出user表
    @GetMapping(value = "/export/user")
    public String getUser(HttpServletResponse response) throws Exception {
        HSSFWorkbook workbook = new HSSFWorkbook();
        // 给sheet起个名字
        HSSFSheet sheet = workbook.createSheet("用户表");

        // 创建表头
        createTitle(workbook, sheet);

        // 准备数据,写入sheet
        List<User> userList = new ArrayList<User>();
        User user1 = new User("110", "zhangsan1", "张三1", new Date());
        User user2 = new User("120", "zhangsan2", "张三1", new Date());
        User user3 = new User("130", "zhangsan3", "张三1", new Date());
        userList.add(user1);
        userList.add(user2);
        userList.add(user3);
        List<User> rows = userList;
        // 设置日期格式
        HSSFCellStyle style = workbook.createCellStyle();
        HSSFDataFormat format = workbook.createDataFormat();
        style.setDataFormat(format.getFormat("yyyy年MM月dd日"));
        // 新增数据行,并且设置单元格数据
        int rowNum = 1;
        for (User user : rows) {
            HSSFRow row = sheet.createRow(rowNum);
            row.createCell(0).setCellValue(user.getId());
            row.createCell(1).setCellValue(user.getUserName());
            row.createCell(2).setCellValue(user.getNickName());
            HSSFCell cell = row.createCell(3);
            cell.setCellValue(user.getCreateTime());
            cell.setCellStyle(style);
            rowNum++;
        }

        // 生成excel文件
        String fileName = "用户表.xls";
        buildExcelFile(fileName, workbook);

        // 浏览器下载excel
        downloadExcelFile(fileName, workbook, response);

        return "";
    }

    // 创建表头
    private void createTitle(HSSFWorkbook workbook, HSSFSheet sheet) {
        HSSFRow row = sheet.createRow(0);
        // 设置列宽,setColumnWidth的第二个参数要乘以256,这个参数的单位是1/256个字符宽度
        sheet.setColumnWidth(1, 12 * 256);
        sheet.setColumnWidth(3, 17 * 256);

        // 设置为居中加粗
        HSSFCellStyle style = workbook.createCellStyle();
        HSSFFont font = workbook.createFont();
        font.setBold(true);
        style.setAlignment(HSSFCellStyle.ALIGN_CENTER);
        style.setFont(font);

        HSSFCell cell;
        cell = row.createCell(0);
        cell.setCellValue("ID");
        cell.setCellStyle(style);

        cell = row.createCell(1);
        cell.setCellValue("用户名");
        cell.setCellStyle(style);

        cell = row.createCell(2);
        cell.setCellValue("昵称");
        cell.setCellStyle(style);

        cell = row.createCell(3);
        cell.setCellValue("创建时间");
        cell.setCellStyle(style);
    }

    // 生成excel文件
    protected void buildExcelFile(String filename, HSSFWorkbook workbook) throws Exception {
        FileOutputStream fos = new FileOutputStream(filename);
        workbook.write(fos);
        fos.flush();
        fos.close();
    }

    // 浏览器下载excel
    protected void downloadExcelFile(String filename, HSSFWorkbook workbook, HttpServletResponse response)
            throws Exception {
        response.setContentType("application/vnd.ms-excel");
        response.setHeader("Content-Disposition", "attachment;filename=" + URLEncoder.encode(filename, "utf-8"));
        OutputStream outputStream = response.getOutputStream();
        workbook.write(outputStream);
        outputStream.flush();
        outputStream.close();
    }

    //导入excel
    @PostMapping("/import/user")
    public boolean addUser(@RequestParam("file") MultipartFile file) {
        boolean a = false;
        String fileName = file.getOriginalFilename();
        try {
            a = batchImport(fileName, file);
        } catch (Exception e) {
            e.printStackTrace();
        }
        return a;
    }

    public boolean batchImport(String fileName, MultipartFile file) throws Exception {
        Workbook wb = null;
        try {
            List<User> userList = new ArrayList<User>();
            if (!fileName.matches("^.+\\.(?i)(xls)$") && !fileName.matches("^.+\\.(?i)(xlsx)$")) {
                throw new RuntimeException("上传文件格式不正确");
            }
            boolean isExcel2003 = true;
            if (fileName.matches("^.+\\.(?i)(xlsx)$")) {
                isExcel2003 = false;
            }
            InputStream is = file.getInputStream();

            if (isExcel2003) {
                wb = new HSSFWorkbook(is);
            } else {
                wb = new XSSFWorkbook(is);
            }
            Sheet sheet = wb.getSheetAt(0);
            if (sheet == null) {
                throw new RuntimeException("sheet页内容为空");
            }
            User user;
            // 从第二行开始解析单元格
            for (int r = 1; r <= sheet.getLastRowNum(); r++) {
                Row row = sheet.getRow(r);
                if (row == null) {
                    continue;
                }
                user = new User();
//              excel  单元格类型            
//            CELL_TYPE_NUMERIC    数值型    0
//            CELL_TYPE_STRING    字符串型    1
//            CELL_TYPE_FORMULA    公式型    2
//            CELL_TYPE_BLANK    空值        3
//            CELL_TYPE_BOOLEAN    布尔型    4
//            CELL_TYPE_ERROR    错误        5

                if (row.getCell(0).getCellType() != Cell.CELL_TYPE_STRING) {
                    throw new RuntimeException("导入失败(第" + (r + 1) + "行,ID请设为文本格式)");
                }
                String id = row.getCell(0).getStringCellValue();
                if (id == null || id.isEmpty()) {
                    throw new RuntimeException("导入失败(第" + (r + 1) + "行,ID未填写)");
                }

                String userName = row.getCell(1).getStringCellValue();
                if (userName == null || userName.isEmpty()) {
                    throw new RuntimeException("导入失败(第" + (r + 1) + "行,用户名未填写)");
                }

                String nickName = row.getCell(2).getStringCellValue();
                if (nickName == null || nickName.isEmpty()) {
                    throw new RuntimeException("导入失败(第" + (r + 1) + "行,昵称未填写)");
                }

                Date createTime;
                if (row.getCell(3).getCellType() != 0) {
                    throw new RuntimeException("导入失败(第" + (r + 1) + "行,创建日期格式不正确或未填写)");
                } else {
                    createTime = row.getCell(3).getDateCellValue();
                }
                user.setId(id);
                user.setUserName(userName);
                user.setNickName(nickName);
                user.setCreateTime(createTime);
                userList.add(user);
            }
        } finally {
            wb.close();
        }

        return true;
    }
}
public class User {

    private String id;

    private String userName;
    
    private String nickName;
    
    private Date createTime;
    
}

猜你喜欢

转载自www.cnblogs.com/moris5013/p/10881003.html