java实现导出excel并将流推送给前端
时间: 2024-01-20 12:04:15 浏览: 72
java导出excel文件并且下载到客户端(包括解决中文乱码).txt
3星 · 编辑精心推荐
以下是一个示例代码,使用Apache POI库来生成Excel,然后将生成的Excel文件流推送给前端:
```java
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.util.List;
import javax.servlet.http.HttpServletResponse;
import org.apache.poi.ss.usermodel.Cell;
import org.apache.poi.ss.usermodel.Row;
import org.apache.poi.ss.usermodel.Sheet;
import org.apache.poi.ss.usermodel.Workbook;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
public class ExcelExporter {
public static void export(List<MyData> dataList, HttpServletResponse response) throws IOException {
// 创建工作簿
Workbook workbook = new XSSFWorkbook();
Sheet sheet = workbook.createSheet("My Data");
// 创建表头
Row headerRow = sheet.createRow(0);
headerRow.createCell(0).setCellValue("ID");
headerRow.createCell(1).setCellValue("Name");
headerRow.createCell(2).setCellValue("Age");
// 填充数据
int rowNum = 1;
for (MyData data : dataList) {
Row row = sheet.createRow(rowNum++);
row.createCell(0).setCellValue(data.getId());
row.createCell(1).setCellValue(data.getName());
row.createCell(2).setCellValue(data.getAge());
}
// 将工作簿转换为字节数组
ByteArrayOutputStream bos = new ByteArrayOutputStream();
workbook.write(bos);
byte[] bytes = bos.toByteArray();
// 设置响应头
response.setContentType("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet");
response.setHeader("Content-Disposition", "attachment; filename=my_data.xlsx");
response.setContentLength(bytes.length);
// 将Excel文件流推送给前端
ServletOutputStream outputStream = response.getOutputStream();
outputStream.write(bytes);
outputStream.flush();
outputStream.close();
}
}
```
在上面的代码中,`MyData`是一个自定义的实体类,包含`id`、`name`和`age`三个属性。`export`方法接收一个`List<MyData>`类型的数据列表和一个`HttpServletResponse`对象,用于将生成的Excel文件流推送给前端。首先,创建一个`XSSFWorkbook`实例表示工作簿,然后创建一个名为"My Data"的工作表。接下来,创建表头,然后遍历数据列表填充数据。最后,将工作簿转换为字节数组,设置响应头,然后将Excel文件流推送给前端。
阅读全文