目录
导入依赖
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi-ooxml</artifactId>
<version>4.1.2</version>
</dependency>
生成表格代码
ps:Shift + 鼠标滑轮可左右滚动,方便观看
public void Test(HttpServletRequest request, HttpServletResponse response) throws IOException {
//要输出的文件路径,但如果使用下面第一种方式,则此路径不生效
String path = "C:"+File.separator+"上课文件"+File.separator;
String filename = path + "aaa.xlsx"; //输出的文件名
Workbook workbook = new XSSFWorkbook(); //创建工作簿
Sheet sheet = workbook.createSheet("测试表");//创建表名
//创建单元格并写入数据,这一句相当于“行”,0就是第一行
Row rowHead = sheet.createRow(0);
//下面的就是这一行的“列”,这里从0到6,共7列。
rowHead.createCell(0).setCellValue("主键ID");
rowHead.createCell(1).setCellValue("姓名");
rowHead.createCell(2).setCellValue("年龄");
rowHead.createCell(3).setCellValue("性别");
rowHead.createCell(4).setCellValue("身高");
rowHead.createCell(5).setCellValue("生日");
rowHead.createCell(6).setCellValue("创建时间");
List<Stu> allStu = stuService.findAllStu();//获取数据库中的数据 allStu
//根据获取的数据,循环一行一行的向Excel表格中插入数据
for (int i = 0; i < allStu.size(); i++) {
int j = 0;//下面的j++ 表示第几列,其实写0,1,2,3... 也可以
Row row = sheet.createRow(i + 1);//这里就跟上面一样了,行 列什么的
//这里面要做什么非空判断,条件筛选什么的根据自己的业务来做就好了
row.createCell(j++).setCellValue(allStu.get(i).getId());
row.createCell(j++).setCellValue(allStu.get(i).getName());
row.createCell(j++).setCellValue(allStu.get(i).getAge());
row.createCell(j++).setCellValue(allStu.get(i).getSex());
row.createCell(j++).setCellValue(allStu.get(i).getHeight());
row.createCell(j++).setCellValue(allStu.get(i).getBirthday());
row.createCell(j++).setCellValue(allStu.get(i).getDate());
}
// 第一种:这种形式只要访问接口,就会在线下载表格文件,这时上面的path路径不会生效,他还是会在默认的位置生成文件
//设置传出的类型
response.setContentType("application/json");
//设置编码格式
response.setHeader("Content-Disposition", "attachment;filename=" + URLEncoder.encode(filename, "utf-8"));
//缓冲
response.flushBuffer();
//将excel通过文件传输流写出
workbook.write(response.getOutputStream());
// 第二种:这种形式直接按照指定的path路径来生成,Excel表格文件直接声称在指定位置
//创建流用于输出
//FileOutputStream fileOutputStream = new FileOutputStream(filename);
//fileOutputStream.close();//关闭资源
workbook.close();//关闭资源
}