SpringBoot实现数据导出

2023年1月11日12:25:19

pom依赖:

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

HTML5 代码:

<a th:class="${active == '/uploadExcel.html'?'nav-link active':'nav-link'}" th:href="@{/admin/exportData}">导出学生信息</a>

service实现类代码

@Override
    public XSSFWorkbook exportData(HttpServletResponse response) {
        List<Student> students = studentDao.findAll();
        XSSFWorkbook wb = new XSSFWorkbook();
        //创建一张表
        Sheet sheet = wb.createSheet("Student");
        //创建第一行,起始为0
        Row titleRow = sheet.createRow(0);
        //第一列
        titleRow.createCell(0).setCellValue("序号");
        //第二列
        titleRow.createCell(1).setCellValue("学号");
        //第三列
        titleRow.createCell(2).setCellValue("姓名");
        //第四列
        titleRow.createCell(3).setCellValue("身份证");
        //第五列
        titleRow.createCell(4).setCellValue("年龄");
        //第六列
        titleRow.createCell(5).setCellValue("地址");
        //序号,默认为1
        int cell = 1;
        //遍历
        for (Student student : students) {
            //第一行保存的是每一列的列名
            //从第二行开始保存数据
            Row row = sheet.createRow(cell);
            //第一列 序号
            row.createCell(0).setCellValue(cell);
            //将数据库的数据遍历出来
            //第二列 学号
            row.createCell(1).setCellValue(student.getId());
            //第三列 姓名
            row.createCell(2).setCellValue(student.getName());
            //第四列 身份证
            row.createCell(3).setCellValue(student.getIdCard());
            //第五列 年龄
            row.createCell(4).setCellValue(student.getAge());
            //第六列 地址
            row.createCell(5).setCellValue(student.getAddress());
            //序号自增
            cell++;
        }
        //设置文档名称,这儿写死了,也可以前端传输(前端传一个文件名到后端就行)
        String fileName = "学生信息表.xlsx";
        OutputStream outputStream =null;
        try {
            //文件名编码格式
            fileName = URLEncoder.encode(fileName,"UTF-8");
            //设置ContentType请求信息格式
            response.setContentType("application/vnd.ms-excel");
            //设置标头
            response.setHeader("Content-disposition", "attachment;filename=" + fileName);
            outputStream = response.getOutputStream();
            wb.write(outputStream);
        } catch (UnsupportedEncodingException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }finally {
            try {
                outputStream.flush();
                outputStream.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
        return wb;
    }

controller层代码:

@GetMapping("/exportData")
    public void exportData(HttpServletResponse response){
        studentService.exportData(response);
    }

  • 作者:TentonStudy
  • 原文链接:https://blog.csdn.net/td725430/article/details/113751700
    更新时间:2023年1月11日12:25:19 ,共 2168 字。