@Log(title = "类别管理", businessType = BusinessType.EXPORT) @PostMapping("/export") @Anonymous public void export(HttpServletResponse response,GradeCategory gradeCategory) { // List<GradeCategory> list = gradeCategoryService.selectGradeCategoryList(gradeCategory); // // 自定义一级标题 // String customFirstLevelTitle = "学生成绩信息"; // ExcelUtil<GradeCategory> util = new ExcelUtil<GradeCategory>(GradeCategory.class); // // util.exportExcel(response, list, "类别管理数据"); // 创建多级表头(示例为二级表头) Workbook workbook = new XSSFWorkbook(); Sheet sheet = workbook.createSheet("多层表头"); // 合并单元格实现层级 sheet.addMergedRegion(new CellRangeAddress(0,0,0,3)); // 一级表头 sheet.addMergedRegion(new CellRangeAddress(1,1,0,1)); // 二级子表头1 sheet.addMergedRegion(new CellRangeAddress(1,1,2,3)); // 二级子表头2 Row row0 = sheet.createRow(0); row0.createCell(0).setCellValue("主标题"); Row row1 = sheet.createRow(1); row1.createCell(0).setCellValue("子标题A"); row1.createCell(2).setCellValue("子标题B"); }我该怎样导出到浏览器
我应该先确定用户需要的是示例代码,所以可能需要分步骤讲解。首先,添加依赖,引用2提到了EasyExcel的Maven依赖,这部分必须包含。然后,创建实体类,用注解标记Excel的列,这也是引用2提到的。接下来是Controller层的处理,使用HttpServletResponse设置响应头,确保浏览器识别为下载文件。引用2中的示例代码可能有帮助,但需要简化并确保正确性。
用户可能对代码的具体实现步骤不太清楚,所以需要分点说明:添加依赖、创建实体类、编写导出方法。另外,需要提到设置响应头的重要性,比如Content-Type和Content-Disposition,这部分在引用2和3都有涉及。还要注意异常处理,比如IOException,但用户示例中可能没有详细说明,可以简单带过。
可能还需要比较不同的工具,比如Apache POI和EasyExcel,引用3提到这两种工具,但用户的问题更倾向于EasyExcel,因为引用的示例中使用的是它。所以重点放在EasyExcel的实现上。
另外,用户可能需要了解如何测试,比如使用Postman,引用4提到了使用POSTMAN上传文件,但导出的话可能需要说明如何触发下载,比如通过浏览器访问特定URL。这部分可以补充在注意事项里。
最后,按照用户的要求,生成相关问题。可能需要包括优化方法、大文件处理、其他导出格式等,这些在引用中都有相关的内容,比如引用2提到处理大型文件,引用3提到多种导出方式。### 分步实现 SpringBoot 导出 Excel 到浏览器的示例
1. 添加依赖
<!-- pom.xml 添加 EasyExcel 依赖 -->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>easyexcel</artifactId>
<version>3.1.0</version>
</dependency>
2. 创建数据实体类
@Data
public class User {
@ExcelProperty("用户ID") // 定义Excel列名
private Long id;
@ExcelProperty("用户名")
private String name;
@ExcelProperty("创建时间")
private Date createTime;
}
3. 编写导出控制器
@RestController
public class ExcelExportController {
@GetMapping("/export")
public void exportExcel(HttpServletResponse response) throws IOException {
// 1. 设置响应头
response.setContentType("application/vnd.ms-excel");
response.setCharacterEncoding("utf-8");
String fileName = URLEncoder.encode("用户列表", "UTF-8");
response.setHeader("Content-disposition", "attachment;filename=" + fileName + ".xlsx");
// 2. 生成模拟数据
List<User> users = Arrays.asList(
new User(1L, "张三", new Date()),
new User(2L, "李四", new Date())
);
// 3. 写入Excel并输出到响应流
EasyExcel.write(response.getOutputStream(), User.class)
.sheet("用户信息")
.doWrite(users);
}
}
关键点说明:
响应头设置
Content-Type: application/vnd.ms-excel
声明文件类型为ExcelContent-Disposition
中的attachment
触发浏览器下载行为[^2]
流式写入优势
EasyExcel通过逐行写入方式,内存消耗稳定在约64MB(与数据量无关),适合处理大文件导出文件命名规范
使用URLEncoder.encode()
处理中文文件名,避免浏览器乱码问题数据生成逻辑
实际开发中应替换为数据库查询:List<User> users = userService.listAllUsers();
测试方法
通过浏览器访问 http://localhost:8080/export
即可自动下载文件
注意事项
- 避免在循环中执行数据库查询,应批量获取数据
- 超过10万行数据建议添加分页查询
- 生产环境需要添加权限校验和异常处理
相关推荐

















