日期:2014-05-17  浏览次数:20732 次

extjs 导出excel的问题
最近在弄extjs导出excel,参考了网上的一些代码,调试的时候总发现有些问题。我用的是extjs4,是不是和网上找的代码的版本不一样呢,如何转换呢。现在我把有问题的代码说明如下。(代码见最下面)
因为是第一次用extjs,这个星期二才第一次接触这个,很不熟悉。
希望各位前辈高手能够把我下面有问题的修订过来或者能给我一个extjs4版本下面grid导出excel的代码,不胜感激。


//创建xls----------------------------------------------------
  var xlBook = xls.Workbooks.Add; //这个没报错 这个我把改成了 var xlBook = xls.Workbooks.Add(); 可以
  var xlSheet = xlBook.Worksheets(1); //这个报错了 我把改成了 var xlSheet = xlBook.ActiveSheet; 可以

//先获取grid模型,再通过grid模型获得列数----------------------
var cm = grid.getColumnModel(); //这个用extjs4的时候有问题,报错,不知道如何改
var colCount = grid.getColumnModel().getColumnCount(); //这个也有问题,报错,不知道如何改

//把隐藏的字段过滤掉,把显示的字段的 (标记)放在数组里,----------------------------------------------
//后面通过getColumnHeader(temp_obj[i - 1])获取grid的列名称----------------------------------------
var temp_obj = [];  
for(i=0;i <colCount;i++){ //colCount有问题
    
  if(cm.isHidden(i) == true){ //cm是由grid.getColumnModel()创建的,这个运行时报错
    
  }else if(cm.getColumnId(i).indexOf("CM")!=-1){ //cm有问题
  temp_obj.push(i);   
  }
  }  

// 把grid的显示的列名称显示在excel表格第一列-------------------------------------------------------
  for(i=1;i <=temp_obj.length;i++){  
  //显示列的列标题  
  xlSheet.Cells(1,i).Value = cm.getColumnHeader(temp_obj[i - 1]); //cm有问题
  }  

//首先获得grid里面数据,放在view里,然后在从第二行开始放到excel表格里-----------------------------------
  var store = grid.getStore(); //对的,不报错
  var recordCount = store.getCount(); //对的,不报错
  var view = grid.getView(); //对的,不报错,但是下面view..getCell(2,2).innerText这个就报错了
  for(i=1;i <=recordCount;i++){   
  for(j=1;j <=temp_obj.length;j++){  
  xlSheet.Cells(i + 1,j).Value = view.getCell(i - 1,temp_obj[j - 1]).innerText; //后面半句有问题
  }  
  }  


代码如下:
--------------------------------------------------
创建grid代码

//创建Grid表格组件
var gridConacterInfo =Ext.create('Ext.grid.Panel',{
title : '查询数据演示',
renderTo: Ext.getBody(),
width:1200,
height:610,
frame:true,
store: store,
columns: [//配置表格列
{header: "id", width: 30, dataIndex: 'id', sortable: true},
{header: "name", width: 80, dataIndex: 'name', sortable: true},
{header: "age", width: 80, dataIndex: 'age', sortable: true}
],
  bbar: [{
xtype: 'pagingtoolbar',
store: store, //这里需要指定与表格相同的store
displayInfo: true
}],
  tbar:
  [   
    
  {
  xtype:"button",
  text:"导出方法 2",
  pressed: true,
  handler:function(){
  downloadViewData(gridConacterInfo);
  }
  }   
  ]
 });

grid转换成excel 代码
 -----------------------这个是网上找的,原版的,去掉了次要部分
  function downloadViewData(gr