2012-11-02

輕輕鬆鬆使用 Spring MVC 3.1.2.RELEASE 產出 Excel 檔(AbstractExcelView)

第一次感覺到 Spring MVC View 機制好用!

使用 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 檔,還能更簡單嗎?
---
---
---

沒有留言:

張貼留言