EasyUi通過POI 實現導出xls表格功能


  Spring +EasyUi+Spring Jpa(持久層)

EasyUi通過POI 實現導出xls表格功能

  EasyUi界面:

  

  點擊導出按鈕實現數據導入到xls表格中

  第一步:修改按鈕事件:

@Controller
@ParentPackage("struts-default")
@Namespace("/")
@Scope("prototype")
public class SubAreaAction extends ActionSupport implements ModelDriven<Subarea>

  //注入service層

  @Resource
      private SubAreaservice subareaservice;    

  //導出按鈕綁定的事件
            function doExport() {

    //實現訪問action的有三種方式:form表單提交、js中調用submit方法、location.href。
                location.href="${pageContext.request.contextPath}/subArea_Export.action"
            }

第二步:在action中提供方法:

    
    @Action(value = "subArea_Export")
    public String subAreaExport() throws IOException {
        // 查詢所有的數據
        List<SubArea> list = subareaservice.findSubArea();
        if (list != null && list.size() > 0) {
          //2.創建空的excel文件,在sheet頁中設置標題行
          //2.1使用workbook創建空excel
            HSSFWorkbook wb = new HSSFWorkbook();

     //2.2在excel中創建空sheet
            HSSFSheet cs = wb.createSheet();
           //2.3在sheet中創建標題行
            HSSFRow row = cs.createRow(0);

          //2.4在標題行創建單元格,賦值
            row.createCell(0).setCellValue("分區編號");
            row.createCell(1).setCellValue("分區地址");
            row.createCell(2).setCellValue("分區關鍵字");
            row.createCell(3).setCellValue("分區輔助關鍵字");
            row.createCell(4).setCellValue("區域編號");
            int index = 1;

  //3.循環分區數據,將數據填充到excel中
            for (SubArea subarea : list) {

      //創建新行
                HSSFRow row1 = cs.createRow(index++);

      //創建新單元格,賦值
                row1.createCell(0).setCellValue(subarea.getId());
                row1.createCell(1).setCellValue(subarea.getAddress());
                row1.createCell(2).setCellValue(subarea.getKeyWords());
                row1.createCell(3).setCellValue(subarea.getAssistKeyWords());

  
                if (subarea.getFixedArea() != null) {
                    row1.createCell(4).setCellValue(subarea.getFixedArea().getId());
                } else {
                    row1.createCell(4).setCellValue("信息未初始化");
                }
            }
           //4.設置文件下載響應參數:文件名、一個流兩個頭
            String filename = "ceshi.xls";

    //獲取瀏覽器類型
            String header = ServletActionContext.getRequest().getHeader("User-Agent");
            
            String mimeType = ServletActionContext.getServletContext().getMimeType(filename);
            filename = FileUtils.encodeDownloadFilename(filename, header);
           //一個流:response的輸出流
            ServletOutputStream os = ServletActionContext.getResponse().getOutputStream();
            //兩個頭之一:content-type,告訴瀏覽器返回的數據格式
            ServletActionContext.getResponse().setContentType(mimeType);

    //兩個頭之二:content-disposition,告訴瀏覽器打開數據的方式,下載方式打開:attachment;filename=【文件名】
            ServletActionContext.getResponse().setHeader("content-disposition", "attachment;filename=" + filename);

           //5.使用response將文件返回到前台
            wb.write(os);
        }
        return NONE;
    }

第三步:通過controller層調用service層

@Service
@Transactional
public class SubAreaserviceimp implements SubAreaservice {

  @Override
    public List<SubArea> findSubArea() {
        // TODO Auto-generated method stub
        return subareadao.findAll();
    }

}

由於此測試持久層用到JPA所以不能處理持久層的代碼了。

直接測試。

測試結果如圖:

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM