ExtJS实现Excel导出(转)

ExtJS是一种基于客户端开发的AJAX应用,是一个与后台技术无关的前台ajax框架。由于项目需求,我们需要实现Excel的导出功能,前台界面是用ExtJS实现。如何实现呢?

1.POI组建实现

//获取问题列表  
List<Suggestion> targetStockList = suggestionService.getSuggestionList(map);  
   
        //创建一个新的Excel  
        HSSFWorkbook workBook = new HSSFWorkbook();  
        //创建sheet页  
        HSSFSheet sheet = workBook.createSheet();  
        //sheet页名称  
        workBook.setSheetName(0, "targetStockList");  
        //创建header页  
        HSSFHeader header = sheet.getHeader();  
        //设置标题居中  
        header.setCenter("标题");  
          
        //设置第一行为Header  
        HSSFRow row = sheet.createRow(0);  
        HSSFCell cell0 = row.createCell(Short.valueOf("0"));  
        HSSFCell cell1 = row.createCell(Short.valueOf("1"));  
        HSSFCell cell2 = row.createCell(Short.valueOf("2"));  
   
          
        // 设置字符集  
        cell0.setEncoding(HSSFCell.ENCODING_UTF_16);  
        cell1.setEncoding(HSSFCell.ENCODING_UTF_16);  
        cell2.setEncoding(HSSFCell.ENCODING_UTF_16);  
  
          
        cell0.setCellValue("问题标题");  
        cell1.setCellValue("问题描述");  
        cell2.setCellValue("反馈时间");  
      
          
        if(targetStockList != null && !targetStockList.isEmpty()) {  
            for(int i = 0; i < targetStockList.size(); i++) {  
                Suggestion targetStock = targetStockList.get(i);  
                row = sheet.createRow(i + 1);  
                cell0 = row.createCell(Short.valueOf("0"));  
                cell1 = row.createCell(Short.valueOf("1"));  
                cell2 = row.createCell(Short.valueOf("2"));  
  
                  
                // 设置字符集  
                cell0.setEncoding(HSSFCell.ENCODING_UTF_16);  
                cell1.setEncoding(HSSFCell.ENCODING_UTF_16);  
                cell2.setEncoding(HSSFCell.ENCODING_UTF_16);  
  
                  
                cell0.setCellValue(targetStock.getType());  
                cell1.setCellValue(targetStock.getContent());  
                cell2.setCellValue(targetStock.getPublishTime());  
       
   
                  
                sheet.setColumnWidth((short) 0, (short) 4000);  
                sheet.setColumnWidth((short) 1, (short) 4000);  
                sheet.setColumnWidth((short) 2, (short) 4000);  
            }  
        }  
          
        //通过Response把数据以Excel格式保存  
        response.reset();  
        response.setContentType("application/msexcel;charset=UTF-8");  
        try {  
            response.addHeader("Content-Disposition", "attachment;filename=\""  
                    + new String(("用户意见信息表" + ".xls").getBytes("GBK"),  
                            "ISO8859_1") + "\"");  
            OutputStream out = response.getOutputStream();  
            workBook.write(out);  
            out.flush();  
            out.close();  
        } catch (Exception e) {  
            e.printStackTrace();  
        }  
        return null;  

 2.EXTJS 调用函数

 

我们知道在界面上通过一个按钮实现Excel的导出,ExtJS的按钮一般都是通过Ext.Ajax.request的异步请求实现数据提交的。但是在这里我们不能使用异步调用,我们需要在直接提示给用户是否保存或打开此文档。如何实现呢?

       其实很简单,我们如果了解了ExtJS就是Javascript开发的,我们就能够很容易实现此功能了。我们在按钮的触发事件中写入此段代码就能实现Excel的函数调用了。

	// 初始化 Excel导出 的按钮
	var exportExcel = Ext.get('exportExcel');
	exportExcel.on('click', exportButtonClick);
	
	function exportButtonClick (){
		 window.location.href = Ext.CONTEXT + '/admin/suggestion.do?method=exportTargetList';
};

 

	// 初始化 Excel导出 的按钮
	var exportExcel = Ext.get('exportExcel');
	exportExcel.on('click', exportButtonClick);
	
	function exportButtonClick (){
		 window.location.href = Ext.CONTEXT + '/admin/suggestion.do?method=exportTargetList';
};

 

posted @ 2015-04-23 17:22  提笔就忘字儿  阅读(728)  评论(0编辑  收藏  举报