Spring整合POI匯出100W excel資料(簡單、簡潔、原生POI)
阿新 • • 發佈:2021-02-09
excel2007格式的單sheet,最高支援1048576 條記錄 約100W+條 1024*1024=1048576
引入POI依賴,只要這個一個就OK了
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi-ooxml</artifactId>
<version>5.0.0</version>
</dependency>
直接看程式碼 一個三個類 一個User類 一個匯出excel程式碼類 一個Controller,程式碼加上了引入的包名,複製下面三個類可直接在spring 專案中使用
User類:
import lombok.Data;
import java.util.Date;
/**
* @author XXX
* @since 2021/2/8 15:30
* Description 使用者資訊表
*/
@Data
public class User {
private Integer id;
private String name;
private Date createTime;
}
匯出excel程式碼核心程式碼類:
import org.apache.poi.ss.usermodel.Row; import org.apache.poi.ss.usermodel.Sheet; import org.apache.poi.ss.usermodel.Workbook; import org.springframework.web.servlet.view.document.AbstractXlsxStreamingView; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.text.SimpleDateFormat; import java.util.*; /** * @author XXX * @since 2021/2/8 15:12 * Description 模擬匯出使用者資訊excel */ public class UserExcel extends AbstractXlsxStreamingView { @Override protected void buildExcelDocument(Map<String, Object> map, Workbook workbook, HttpServletRequest request, HttpServletResponse response) throws Exception { // 1. 模擬100W+條使用者資訊 List<User> list = new ArrayList<>(1048575); for (int i = 0; i < 1048575; i++) { User user = new User(); user.setId(i); user.setName(UUID.randomUUID().toString()); user.setCreateTime(new Date()); list.add(user); } Sheet sheet = workbook.createSheet("測試sheet"); int rowNum = 0; // 2. 建立excel表頭行 Row titleRow = sheet.createRow(rowNum++); titleRow.createCell(0).setCellValue("編號"); titleRow.createCell(1).setCellValue("名字"); titleRow.createCell(2).setCellValue("建立時間"); // 3. 填充使用者資料 SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); for (User excel : list) { Row row = sheet.createRow(rowNum++); row.createCell(0).setCellValue(excel.getId()); row.createCell(1).setCellValue(excel.getName()); row.createCell(2).setCellValue(simpleDateFormat.format(excel.getCreateTime())); } } }
Controller類:
import com.example.spring.excel.excel.UserExcel; import lombok.extern.slf4j.Slf4j; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RestController; import org.springframework.web.servlet.view.document.AbstractXlsxStreamingView; /** * @author XXX * @since 2021/2/8 14:47 * Description 測試excel控制器 */ @Slf4j @RestController public class TestExcelController { @GetMapping(value = "/exportExcel") public AbstractXlsxStreamingView exportExcel() { return new UserExcel(); } }
是不是很簡單?
這裡只是模擬了最簡單的匯出100W條資料,耗時大概4-5秒左右。匯出的資料大概40M