首页 > 语言 > JavaScript > 正文

spring+angular实现导出excel的实现代码

2024-05-06 15:42:03
字体:
来源:转载
供稿:网友

需求描述

要求批量导出数据,以excel的格式。

选择方式

前台 + 后台

之前在别的项目中也遇到过导出的问题,解决方式是直接在前台导出将表格导出。

这次没有选择前台导出的方式,是由于需要导出所有的数据,所以考虑直接在后台获取所有的数据,然后就直接导出,最后前台触发导出API。

后台实现

导出使用的是POI,在上一篇文章中,我已做了基本的介绍,这里就不做介绍配置了,参照:POI实现将导入Excel文件

创建表格

首先先建立一张表,这里要建立.xlsx格式的表格,使用XSSFWorkbook:

Workbook workbook = new XSSFWorkbook();Sheet sheet = workbook.createSheet("new sheet");

接着创建表格的行和单元格:

Row row = sheet.createRow(0);row.createCell(0);

然后设置表头:

row.createCell(0).setCellValue("学号");row.createCell(1).setCellValue("姓名");row.createCell(2).setCellValue("手机号码");

最后获取所有的数据,对应的填写到单元格中:

int i = 1;for (Student student : studentList) {  row = sheet.createRow(i);  row.createCell(0).setCellValue(student.getStudentNumber());  row.createCell(1).setCellValue(student.getName());  row.createCell(2).setCellValue(student.getPhoneNumber());  i++;}

输出

这部分是纠结比较久的,反复试了很多次。

一开始是直接以文件输出流的形式输出的:

FileOutputStream output = new FileOutputStream("test.xlsx");workbook.write(output);

这样可以正确生成文件,但是问题是,它会生成在项目的根目录下。

而我们想要的效果是,下载在本地自己的文件夹中。

要解决这个问题,需要添加相应信息,返回给浏览器:

OutputStream fos = response.getOutputStream();response.reset();String fileName = "test";fileName = URLEncoder.encode(fileName, "utf8");response.setHeader("Content-disposition", "attachment;filename="+ fileName+".xlsx");response.setCharacterEncoding("UTF-8");response.setContentType("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet");workbook.write(fos);fos.close();

后台完成代码:

public void batchExport(HttpServletResponse response) {  logger.debug("创建工作表");  Workbook workbook = new XSSFWorkbook();  Sheet sheet = workbook.createSheet("new sheet");  logger.debug("获取所有学生");  List<Student> studentList = (List<Student>) studentRepository.findAll();  logger.debug("建立表头");  Row row = sheet.createRow(0);  row.createCell(0).setCellValue("学号");  row.createCell(1).setCellValue("姓名");  row.createCell(2).setCellValue("手机号码");  logger.debug("将学生信息写入对应单元格");  int i = 1;  for (Student student : studentList) {    row = sheet.createRow(i);    row.createCell(0).setCellValue(student.getStudentNumber());    row.createCell(1).setCellValue(student.getName());    row.createCell(2).setCellValue(student.getPhoneNumber());     i++;  }  OutputStream fos;  try {    fos = response.getOutputStream();    response.reset();    String fileName = "test";    fileName = URLEncoder.encode(fileName, "utf8");    response.setHeader("Content-disposition", "attachment;filename="+ fileName+".xlsx");    response.setCharacterEncoding("UTF-8");    response.setContentType("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet");// 设置contentType为excel格式    workbook.write(fos);    fos.close();  } catch (Exception e) {      e.printStackTrace();  }}            
发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表

图片精选