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);
        var headerIndex=[];
        Ext.Array.forEach( cm, function(item){
            if (item.xtype == "gridcolumn") {
                headerIndex.push(item.dataIndex);
            }
        });
        var headText=[];
        Ext.Array.forEach( cm, function(item){
            if (item.xtype == "gridcolumn") {
                headText.push(item.text);
            }
        });
        Ext.Ajax.request({
            disableCaching: true ,
            url: ‘../../sys/MyExportExcel!exportExcel.action‘,
            method: ‘POST‘,
            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/

运行结果:

时间: 2024-12-09 10:18:19

Extjs 导出excel的相关文章

利用Extjs导出excel文件(转)

最近在做一个项目,需要在原先的表格的基础上导出excel文件,原先是想用java后台来实现这个功能,但是,后来发现,原来extjs也附带有导出excel表的功能,就在GridPanel的基础上导出,http://www.blogjava.net/rockblue1988/archive/2012/02/29/370977.html,这是我做的时候,参考的一篇网上的文章.具体的做法是,将extjsGridPanel里面的数据拿出来,转换成xml,然后发送给后台,后台响应之后,将数据输出为Excel

Extjs导出excel数据

环境:前台:Extjs:后台hibernate+struct 需求:前台查询结果分页显示,导出到excel时需要导出所有符合查询调节的记录. 前台: var panel = Ext.getCmp('qRINFPanel'); var form = panel.getForm(); var params = grid.getStore().baseParams; params['filename']='projects.xls'; params['q_pDomain'] = getAgentDom

ExtJS实现Excel导出

1. 使用POI组件实现excel导出功能 //获取问题列表 List<Suggestion> targetStockList = suggestionService.getSuggestionList(map);           //创建一个新的Excel         HSSFWorkbook workBook = new HSSFWorkbook();         //创建sheet页         HSSFSheet sheet = workBook.createSheet

Struts2+ExtJS+poi导出excel

首先生成Excel import java.io.IOException; import java.io.OutputStream; import javax.servlet.http.HttpServletResponse; import org.apache.poi.hssf.usermodel.HSSFCell; import org.apache.poi.hssf.usermodel.HSSFCellStyle; import org.apache.poi.hssf.usermodel.

[ExtJS5学习笔记]第三十四节 sencha extjs 5 grid表格之java后台导出excel

继上次使用js前端导出excel之后,还有一个主要大家比较关注的是后台实现导出excel,因为本人开发使用的java所以这里使用apache的开源项目poi进行后台excel的导出. 本文目录 本文目录 poi项目下载及加载 extjs前端导出设置 extjs后台对应的解决方案 创建excel工作簿 创建一个excel页签 生成excel样式并初始化 产生表格标题行build headers 构造数据行build rows poi项目下载及加载 POI项目是apache官网的一个开源项目,其主要

[ExtJS5学习笔记]第三十三节 sencha extjs 5 grid表格导出excel

使用extjs肯定少不了使用表格控件,用到表格,领导们(一般)还是惯于使用excel看数据,所以用到extjs表格的技术猿们肯定也会有导出表格excel这一个需求,本文主要针对如何在用extjs将grid表格导出到excel,使用的是前端导出,不涉及后端. 本文目录 本文目录 源代码打包下载 将源代码嵌入到应用中 查看导出按钮以及导出效果 扩展支持sum统计和groupsum分组 源代码打包下载 本次使用的是github上的一个开源项目Exporter 下载地址:https://github.c

Jquery easyui datagrid 导出Excel

datagrid的扩展方法,用于将当前的数据生成excel需要的内容. 1 <script> 2 /** 3 Jquery easyui datagrid js导出excel 4 修改自extgrid导出excel 5 * allows for downloading of grid data (store) directly into excel 6 * Method: extracts data of gridPanel store, uses columnModel to constru

导出excel——弹出框

表单提交 凡是表单提交(表单提交分3种,见下面的1.2.3)的话,并且设置了表单标签的enctype="multipart/form-data"属性,那么这个时候就会打开弹出框. 1.表单提交 2.js表单提交 3.jquery.extjs等等其他的表单提交 代码示例 //jsp代码 <s:form id="myform1" method="post" enctype="multipart/form-data">

通用导出excel(可控制内容)

实体类 package util; import java.sql.Timestamp; public class Book { private int bookId; private String name; private String author; private float price; private String isbn; private String pubName; private Timestamp date; public Book() { } public Book(i