Extjs 导出excel

1前台响应

onExcelBtnClick: function(button, e, eOpts) {
                   
            var gridpanel = this.getRunGrid();
            
            var cm=gridpanel.columns;
            //封装表格数据
            var data=[];
            var store = gridpanel.getStore();
            store.each(function(record){
                data.push(record.data);
            
            },this);
            //获取表头的dataIndex
            var headerIndex=[];
            Ext.Array.forEach( cm, function(item){
            
                if (item.xtype == "gridcolumn"&&!item.isHidden()) {
                    headerIndex.push(item.dataIndex);
                }
            
            });
            //获取表头的Text
            var headText=[];
            Ext.Array.forEach( cm, function(item){
            
                if (item.xtype == "gridcolumn"&&!item.isHidden()) {
                    headText.push(item.text);
                }
            
            });
            if (!Ext.fly('frmDummy')) {
                var frm = document.createElement('form');
                frm.id = 'frmDummy';
                frm.name = gridpanel.getId();
                frm.className = 'x-hidden';
                document.body.appendChild(frm);
            }
            
            Ext.Ajax.request({
                disableCaching: true ,
                url: '../../sys/MyExportExcel!exportExcel.action',
                method: 'POST',
                isUpload: true,
                form: Ext.fly('frmDummy'),
                params: {
                    excleData:Ext.JSON.encode(data),
                    excleHeader:Ext.JSON.encode(headerIndex),
                    excleText:Ext.JSON.encode(headText)
                }
            });
}

2 后台解析数据

package com.kl.action.sys;
import java.io.OutputStream;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import net.sf.json.JSONArray;
import net.sf.json.JSONObject;
import org.apache.poi.hssf.usermodel.HSSFCell;
import org.apache.poi.hssf.usermodel.HSSFRow;
import org.apache.poi.hssf.usermodel.HSSFSheet;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.apache.struts2.convention.annotation.Action;
import org.apache.struts2.convention.annotation.Namespace;
import org.apache.struts2.interceptor.ServletRequestAware;
import org.apache.struts2.interceptor.ServletResponseAware;
import org.apache.struts2.interceptor.SessionAware;
import com.kl.action.ParentAction;
import com.opensymphony.xwork2.ActionSupport;
@Namespace("/sys")
@Action(value = "MyExportExcel")
public class ExportExcel extends ActionSupport  implements 
 ServletRequestAware, ServletResponseAware {
    private String excleData;
    private String excleHeader;
    private String excleText;
    
    protected HttpServletRequest request;
    protected HttpServletResponse response;
    
    
    public String getExcleData() {
        return excleData;
    }
    public void setExcleData(String excleData) {
        this.excleData = excleData;
    }
    public String getExcleHeader() {
        return excleHeader;
    }
    public void setExcleHeader(String excleHeader) {
        this.excleHeader = excleHeader;
    }
    public String getExcleText() {
        return excleText;
    }
    public void setExcleText(String excleText) {
        this.excleText = excleText;
    }
    public void exportExcel(){
        JSONArray excle = JSONArray.fromObject(this.excleData);
        HSSFWorkbook workbook = new HSSFWorkbook();
        HSSFSheet sheet = workbook.createSheet();
        // 解析表头
        JSONArray dataHeader = JSONArray.fromObject(this.excleText);
        HSSFRow headrow = sheet.createRow(0);
        for (int col = 0; col < dataHeader.size(); col++) {
            String mycell = dataHeader.getString(col);
            HSSFCell cell = headrow.createCell(col);
            // 定义单元格为字符串类型
            cell.setCellType(HSSFCell.CELL_TYPE_STRING);
            // 在单元格中输入一些内容
            cell.setCellValue(mycell);
        }
        int r=0;
        for(Object o : excle) {
            JSONObject excleObj = (JSONObject)o;
            HSSFRow row=sheet.createRow((short)r+1);
            
            //解析列
            JSONArray dataIndex = JSONArray.fromObject(this.excleHeader);
            
            for(int col=0;col<dataIndex.size();col++){
                String mycell=dataIndex.getString(col);
                mycell=excleObj.getString(mycell);
                HSSFCell cell = row.createCell(col);
                // 定义单元格为字符串类型
                cell.setCellType(HSSFCell.CELL_TYPE_STRING);
                // 在单元格中输入一些内容
                cell.setCellValue(mycell);
                
            }
            r++;
        };
        //通过Response把数据以Excel格式保存
        response.reset();
        response.setContentType("application/msexcel;charset=UTF-8");
        response.setCharacterEncoding("UTF-8");
        try {
            response.addHeader("Content-Disposition", "attachment;filename=\""
                    + new String(("test" + ".xls").getBytes("UTF-8"),
                            "ISO8859_1") + "\"");
            OutputStream out = response.getOutputStream();
            workbook.write(out);
            out.flush();
            out.close();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
    @Override
    public void setServletResponse(HttpServletResponse response) {
        this.response = response;
    }
    @Override
    public void setServletRequest(HttpServletRequest request) {
        this.request = request;
    }
    
}


示例依赖apache  poi组件

请参考 官方案例和参考文档

http://extjs.com/forum/showthread.php?t=32400&highlight=excel

http://yeakyang.blog.163.com/blog/static/6413081200961611437835/


运行结果:

Extjs 导出excel_第1张图片





你可能感兴趣的:(Extjs 导出excel)