<强>需求描述强>
要求批量导出数据,以excel的格式。
<强>选择方式强>
前台+后台
之前在别的项目中也遇到过导出的问题,解决方式是直接在前台导出将表格导出。
这次没有选择前台导出的方式,是由于需要导出所有的数据,所以考虑直接在后台获取所有的数据,然后就直接导出,最后前台触发导出API。
<强>后台实现强>
导出使用的是芋泥,在上一篇文章中,我已做了基本的介绍,这里就不做介绍配置了,参照:POI实现将导入Excel文件
<>强创建表格强>
首先先建立一张表,这里要建立.xlsx格式的表格,使用XSSFWorkbook:
工作簿工作簿=new XSSFWorkbook (); 单表=工作簿。createSheet(“新单”);
接着创建表格的行和单元格:
行一行=sheet.createRow (0);row.createCell (0);
然后设置表头:
row.createCell (0) .setCellValue(“学”号); row.createCell (1) .setCellValue(“姓名”); row.createCell (2) .setCellValue(“手机号码”);
最后获取所有的数据,对应的填写到单元格中:
int i=1; (学生学生:studentList) { 行=sheet.createRow(我); row.createCell (0) .setCellValue (student.getStudentNumber ()); row.createCell (1) .setCellValue (student.getName ()); row.createCell (2) .setCellValue (student.getPhoneNumber ()); 我+ +; } >之前<强>输出强>
这部分是纠结比较久的,反复试了很多次。
一开始是直接以文件输出流的形式输出的:
FileOutputStream输出=new FileOutputStream (“test.xlsx”);workbook.write(输出);这样可以正确生成文件,但是问题是,它会生成在项目的根目录下。
而我们想要的效果是,下载在本地自己的文件夹中。
要解决这个问题,需要添加相应信息,返回给浏览器:
OutputStream安全系数=response.getOutputStream (); response.reset (); 字符串文件名=安馐浴? 文件名=URLEncoder。编码(文件名,“utf8 "); 响应。setHeader(“附加”,“附件;文件名=" +文件名+“.xlsx”); response.setCharacterEncoding (“utf - 8”); response.setContentType(“应用程序/vnd.openxmlformats-officedocument.spreadsheetml.sheet”); workbook.write (fos)提交; fos.close (); >之前后台完成代码:
公共空间batchExport (HttpServletResponse响应){ logger.debug(“创建工作表”); 工作簿工作簿=new XSSFWorkbook (); 单表=工作簿。createSheet(“新单”); logger.debug(“获取所有学生”); ListstudentList=(List <强>前台实现强>
在前台调用的时候,也经历了多次失败,谷歌了很多篇文章,各种各样的写法都有,自己也是试了试,前台后台都对照做了很多尝试,但基本都是有问题的。这里我值给出我最后选择配套后台的方法。
弹簧+角实现导出excel的实现代码