Springboot写导出excel

本文介绍了一种使用Java将日志记录列表导出为Excel文件的方法。通过创建HSSFWorkbook对象并利用@RequestMapping注解,文章详细展示了如何从前端触发导出操作,包括设置文件名、创建表头、填充数据行等步骤。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

导出excel

这里是写的一个日志记录列表导出的,其实都是一样的(java),,前端直接就是写个按钮调用接口就行。这里做个记录方便以后直接C+V


	@Autowired
	private ILogService 

	@RequestMapping(value = "/export/excelDownloads", method = RequestMethod.GET)
    public void downloadAllClassmate(HttpServletResponse response) throws IOException {
        HSSFWorkbook workbook = new HSSFWorkbook();
        HSSFSheet sheet = workbook.createSheet("信息表");

        List<Log> logList = ILogService.list();

        String fileName = "exportLogInf"  + ".xls";//设置要导出的文件的名字
        //新增数据行,并且设置单元格数据

        int rowNum = 1;

        String[] headers = { "操作用户", "操作内容", "操作事件", "IP地址","操作结果"};
        //headers表示excel表中第一行的表头

        HSSFRow row = sheet.createRow(0);
        //在excel表中添加表头

        for(int i=0;i<headers.length;i++){
            HSSFCell cell = row.createCell(i);
            HSSFRichTextString text = new HSSFRichTextString(headers[i]);
            cell.setCellValue(text);
        }

        //在表中存放查询到的数据放入对应的列
        for (Log log : logList) {
            HSSFRow row1 = sheet.createRow(rowNum);
            row1.createCell(0).setCellValue(log.getUserName());
            row1.createCell(1).setCellValue(log.getOperation());
            row1.createCell(2).setCellValue(log.getCreateTime());
            row1.createCell(3).setCellValue(log.getIp());
			row1.createCell(3).setCellValue(log.getOperationType());
            rowNum++;
        }

        response.setContentType("application/octet-stream");
        response.setHeader("Content-disposition", "attachment;filename=" + fileName);
        response.flushBuffer();
        workbook.write(response.getOutputStream());
    }




最后直接访问 ip:port +项目名/export/excelDownload

### 如何在 SpringBoot 和 Vue 项目中实现导出 Excel 功能 #### 后端部分 (SpringBoot) 为了实现出 Excel 文件的功能,在后端可以使用 `EasyExcel` 或者传统的 `POI` 库来完成。以下是两种方式的具体实现: 1. **使用 EasyExcel** 易于配置和高性能的 `EasyExcel` 是一种流行的解决方案,尤其适用于大数据量场景。 - 添加依赖项到项目的 `pom.xml` 中: ```xml <dependency> <groupId>com.alibaba</groupId> <artifactId>easyexcel</artifactId> <version>3.0.5</version> </dependency> ``` - 创建实体类用于映射 Excel 表格中的列: ```java import com.alibaba.excel.annotation.ExcelProperty; public class ExportStudentExcel { @ExcelProperty("学生姓名") private String name; @ExcelProperty("学号") private String studentNo; // Getter and Setter methods... } ``` - 编服务方法以生成并返回 Excel 文件流: ```java import com.alibaba.excel.EasyExcel; import javax.servlet.http.HttpServletResponse; import java.io.IOException; import java.net.URLEncoder; import java.util.List; public void export(HttpServletResponse response, List<ExportStudentExcel> data) throws IOException { response.setContentType("application/vnd.ms-excel"); response.setCharacterEncoding("utf-8"); String fileName = URLEncoder.encode("学生列表", "UTF-8").replaceAll("\\+", "%20"); response.setHeader("Content-disposition", "attachment;filename=" + fileName + ".xlsx"); EasyExcel.write(response.getOutputStream(), ExportStudentExcel.class).sheet("模板").doWrite(data); } ``` 2. **使用 POI** 如果不想引入额外的第三方库,则可以选择 Apache POI 来手动创建 Excel 文档。 - 添加 Maven 依赖: ```xml <dependency> <groupId>org.apache.poi</groupId> <artifactId>poi-ooxml</artifactId> <version>5.2.3</version> </dependency> ``` - 使用以下代码片段编控制器逻辑: ```java import org.apache.poi.ss.usermodel.*; import org.apache.poi.xssf.streaming.SXSSFWorkbook; import javax.servlet.ServletOutputStream; import javax.servlet.http.HttpServletResponse; import java.io.IOException; import java.util.List; public void exportWithPoi(HttpServletResponse response, List<String[]> dataList) throws IOException { SXSSFWorkbook workbook = new SXSSFWorkbook(); Sheet sheet = workbook.createSheet("学生信息表"); Row rowHeader = sheet.createRow(0); CellStyle headerCellStyle = workbook.createCellStyle(); Font font = workbook.createFont(); font.setBold(true); headerCellStyle.setFont(font); String[] headers = {"序号", "姓名", "年龄"}; for(int i=0;i<headers.length;i++) { Cell cell = rowHeader.createCell(i); cell.setCellValue(headers[i]); cell.setCellStyle(headerCellStyle); } int rowNum = 1; for(String[] rowData : dataList){ Row row = sheet.createRow(rowNum++); for(int j=0;j<rowData.length;j++){ row.createCell(j).setCellValue(rowData[j]); } } ServletOutputStream outputStream = response.getOutputStream(); response.setContentType("application/octet-stream"); response.setHeader("Content-Disposition","attachment; filename=\"students.xlsx\""); workbook.write(outputStream); workbook.close(); outputStream.flush(); outputStream.close(); } ``` #### 前端部分 (Vue.js) 前端主要通过调用接口获取服务器生成好的文件链接或者二进制数据,并触发浏览器下载行为。 1. 定义 API 请求函数: ```javascript async function downloadFile() { const res = await axios({ method: 'GET', url: '/api/export/excel', // 替换为实际的服务地址 responseType: 'blob' }); let blob = new Blob([res.data], { type: 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet' }); let link = document.createElement('a'); link.href = window.URL.createObjectURL(blob); link.download = 'student_list.xlsx'; // 设置默认保存名称 link.click(); } ``` 2. 调整按钮点击事件绑定上述方法即可。 --- ### 总结 无论是选用哪种技术方案,都需要考虑以下几个方面: - 数据源准备(数据库查询)。 - 文件格式定义以及样式定制化需求。 - 用户界面设计以便发起请求动作[^3]。 以上介绍了基于 Spring Boot 和 Vue 构建应用程序时如何集成 Excel 导出功能的一些基本概念和技术细节[^4]^。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值