使用 JstlView 輸出 JSP 要搭配使用 JSP 檔,使用 JasperReportsPdfView 輸出 JasperReports PDF 要搭配 japser 檔,那輸出 Excel 檔呢?當然沒有像 JSP 或 Jasper 這樣的範本檔,所以就直接用 View 輸出囉。
使用 Java 輸出 Excel 檔當然是用 Apache POI,所以得先加入 Dependency。
<dependency> <groupId>org.apache.poi</groupId> <artifactId>poi</artifactId> <version>3.8</version> </dependency>然後,在 Controller 直接實作抽象的 AbstractExcelView 就可以了。
@RequestMapping(value = "/export")
public View export(Model model, HttpServletRequest request) {
// 以 Apache POI 實作 AbstractExcelView
View view = new AbstractExcelView() {
@Override
protected void buildExcelDocument(Map<String, Object> model,
HSSFWorkbook workbook, HttpServletRequest request,
HttpServletResponse response) throws Exception {
// 建立 Sheet
HSSFSheet sheet = workbook.createSheet("客戶資料");
int rowNum = 0;
int idx = 0;
// 建立標題
HSSFRow header = sheet.createRow(rowNum++);
header.createCell(idx++).setCellValue("流水號");
header.createCell(idx++).setCellValue("名稱");
header.createCell(idx++).setCellValue("電話");
header.createCell(idx++).setCellValue("手機");
header.createCell(idx++).setCellValue("Email");
header.createCell(idx++).setCellValue("地址");
// 輸出內容
List<Customer> list = null; // 取得客戶資料
HSSFRow row;
for (Customer p : list) {
idx = 0;
row = sheet.createRow(rowNum++);
row.createCell(idx++).setCellValue(p.getUid());
row.createCell(idx++).setCellValue(p.getName());
row.createCell(idx++).setCellValue(p.getTel());
row.createCell(idx++).setCellValue(p.getCellphone());
row.createCell(idx++).setCellValue(p.getEmail());
row.createCell(idx++).setCellValue(p.getAddress());
}
}
};
// 直接回傳 View 物件,就可以生出水水的 Excel 檔了
return view;
}
這樣就可以用 http://.../export.xls 得到 Excel 檔,還能更簡單嗎?---
---
---
沒有留言:
張貼留言