java中 Excel表实现数据导入导出

 

需要引入依赖:

<!-- https://mvnrepository.com/artifact/org.apache.poi/poi -->
<dependency>
  <groupId>org.apache.poi</groupId>
  <artifactId>poi</artifactId>
  <version>4.0.0</version>
</dependency>

<!-- 如果要使用 xlsx 和 流,需要引入下面这个包 -->
<dependency>
  <groupId>org.apache.poi</groupId>
  <artifactId>poi-ooxml</artifactId>
  <version>4.0.0</version>
</dependency>

 

 

数据导入:

 @PostMapping("/imp")
    public String imp(@RequestPart("filePath") MultipartFile filePath) {

        //创建一个excel文件
        HSSFWorkbook workbook = null;
        try {

            workbook = new HSSFWorkbook(filePath.getInputStream());  //获取文件
            Sheet sheet = workbook.getSheetAt(0); //获取第一个工作表

            //循环工作表的数据
            //getLastRowNum() 获取行
            for (int i = 0; i < sheet.getLastRowNum(); i++) {
                Row row = sheet.getRow(i + 1); //下表是从0开始的所以 把行数设置为第二行从第二行开始读
                Cell cell = row.getCell(0); //获取第一个单元格,以此类推
                Cell cel2 = row.getCell(1);
                Cell cel3 = row.getCell(2);
                Cell cel4 = row.getCell(3);
                Cell cel5 = row.getCell(4);

                //获取值
                int id = (int) cell.getNumericCellValue();
                String name = cel2.toString();
                String sex = cel3.toString();
                String education = cel4.toString();
                int monthly = (int) cel5.getNumericCellValue();

                //把值放到对象
                Staff staff = new Staff(id, name, sex, education, monthly);

                //调用mapper进行添加
                int count = staffMapper.insert(staff);
                if (count > 0) {
                    System.out.println("上传成功");
                }
            }

        } catch (IOException e) {
            e.printStackTrace();
        }
        return "redirect:/emp";
    }

数据导出到本地:

  //把数据导出到Excel中
    @GetMapping("/exc")

    public String derive(Model model, HttpSession session) {

        // 第一步,创建一个webbook,对应一个Excel文件
        HSSFWorkbook wb = new HSSFWorkbook();

        // 第二步,在webbook中添加一页,对应Excel文件中的sheet
        HSSFSheet sheet = wb.createSheet("员工表一");

        // 第三步,在sheet中添加表头第0行,注意老版本poi对Excel的行数列数有限制short
        HSSFRow row = sheet.createRow((int) 0);  //0代表第一行

        // 第四步,创建单元格,并设置值表头 设置表头居中
        HSSFCellStyle style = wb.createCellStyle();
        style.setAlignment(HorizontalAlignment.CENTER);


        HSSFCell cell = row.createCell((short) 0);
        cell.setCellValue("员工编号");
        cell.setCellStyle(style);

        cell = row.createCell((short) 1);
        cell.setCellValue("姓名");
        cell.setCellStyle(style);

        cell = row.createCell((short) 2);
        cell.setCellValue("性别");
        cell.setCellStyle(style);

        cell = row.createCell((short) 3);
        cell.setCellValue("学历");
        cell.setCellStyle(style);

        cell = row.createCell((short) 4);
        cell.setCellValue("月薪");
        cell.setCellStyle(style);


        // 第五步,写入实体数据 实际应用中这些数据从数据库得到,
        List<Staff> list = staffMapper.selectAll();
        for (int i = 0; i < list.size(); i++) {
            row = sheet.createRow((int) i + 1);
            // 第四步,创建单元格,并设置值
            row.createCell((short) 0).setCellValue(list.get(i).getId());
            row.createCell((short) 1).setCellValue(list.get(i).getName());
            row.createCell((short) 2).setCellValue(list.get(i).getSex());
            row.createCell((short) 3).setCellValue(list.get(i).getEducation());
            row.createCell((short) 4).setCellValue(list.get(i).getMonthly());
        }
        // 第六步,将文件存到指定位置
        try {
            FileOutputStream fout = new FileOutputStream("E:\\aaa.xls");
            wb.write(fout);
            fout.close();
        } catch (Exception e) {
            e.printStackTrace();
        }
        session.setAttribute("add","数据导出成功");
        return "redirect:/emp";
    }

 

可以结合 SpringMVC 的上传下载使用

@Controller
public class ExcelController {
    @Autowired
    private ExcelService excelService;

    @GetMapping(value = "/excel_download")
    ResponseEntity<byte[]> downloadFile() throws IOException {
        byte[] contents = excelService.exportExcel().toByteArray();

        HttpHeaders headers = new HttpHeaders();
        headers.setCacheControl("no-cache, no-store, must-revalidate");
        headers.setContentType(MediaType.APPLICATION_OCTET_STREAM);
        headers.setContentLength(contents.length);
        headers.setContentDispositionFormData("attachment", "xxx_" + new SimpleDateFormat("yyyyMMddhhmmss").format(new Date()) + ".xls");

        return ResponseEntity.ok().headers(headers).body(contents);
    }
}

 

posted @ 2018-11-23 11:11  随★风  阅读(1369)  评论(0编辑  收藏  举报