我试图导出excel文件中的rallygrid数据,但只获取标题不值

我试图导出excel文件中的rallygrid数据,但只获取标题不值。 下面是我写的代码,用于生成网格和导出button

从这里[ https://github.com/andreano/TaskDelta/blob/master/App.js] ,我偷了出口代码

prepareChart: function(iteration_data) { this.converted_values = []; this.accept_values = []; this.commit_values = []; parents = []; rootParent = this.getContext().getProject().Name; sortedArray = []; var project_hash = {}; // project_by_name, with children Ext.Array.each(iteration_data, function(iteration){ if ((iteration.ProjectName != rootParent && iteration.ChildCount > 0) || iteration.ParentName == rootParent) { parents.push(iteration.ProjectName); } // make a place for me if ( ! project_hash[iteration.ProjectName] ) { project_hash[iteration.ProjectName] = []; } // make a place for my parent so it can know children if ( iteration.ParentName ) { if ( ! project_hash[iteration.ParentName]) { project_hash[iteration.ParentName] = []; } project_hash[iteration.ParentName] = Ext.Array.merge( project_hash[iteration.ParentName], iteration.ProjectName); } }, this); // build order this way: //console.log("Current: ", this.getContext().getProject().Name ); // order the array by parents to children to grandchildren sortedArray = this._getTreeArray( this.getContext().getProject().Name , project_hash); parents = Ext.Array.unique(parents); sortedData = []; Ext.Array.each(sortedArray, function(name){ Ext.Array.each(iteration_data, function(ite){ if(ite.ProjectName == name) { sortedData.push(ite); }; }); }); Ext.Array.each(iteration_data, function(iteration){ if (iteration.ProjectName == rootParent) { sortedData.push(iteration); } }, this); iteration_data = sortedData; sprints = []; teams = []; this.ratio = {}; for ( var i=0; i<iteration_data.length; i++ ) { commit_accept_ratio = 0; var data_point = iteration_data[i]; this.commit_values.push( data_point.Commit ); this.accept_values.push( data_point.Accept ); if ( data_point.Commit > data_point.Accept ) { this.converted_values.push( data_point.Commit - data_point.Accept ); } else { this.converted_values.push( 0 ); } if (data_point.Commit != 0) { commit_accept_ratio = (data_point.Accept / data_point.Commit ) * 100; } else { commit_accept_ratio = 0; }; sprints.push(iteration_data[i].Name); teams.push(iteration_data[i].ProjectName); teams.push(rootParent); this.ratio[data_point.ObjectID] = commit_accept_ratio; } this.sprints = Ext.Array.unique(sprints).sort(); this.teams = Ext.Array.unique(teams); removable_teams = []; for ( var i=0; i<this.teams.length; i++ ) { team_name = null; var count = 0; Ext.Array.each(iteration_data, function(data) { if (this.teams[i] == data.ProjectName && data.Commit == 0 || null || undefined && data.Accept == 0 || null || undefined) { count += 1; team_name = data.ProjectName; } }, this); if (count == this.sprints.length) { removable_teams.push(team_name); } } removable_teams = Ext.Array.unique(removable_teams); records = []; recordHash = {}; summaryHash = {}; Ext.Array.each(iteration_data, function(iter) { if (!recordHash[iter.ProjectName]) { recordHash[iter.ProjectName] = { Team: iter.ProjectName, Name: '4 Sprint Summary', Commit: [], Accept: [], Perc: [], Summary: 0 }; } if (!Ext.Array.contains(removable_teams, iter.ProjectName)) { recordHash[iter.ProjectName]["Commit-" + iter.Name] = iter.Commit; recordHash[iter.ProjectName]["Accept-" + iter.Name] = iter.Accept; recordHash[iter.ProjectName]["Perc-" + iter.Name] = this.ratio[iter.ObjectID]; } }, this); var summaryArray = Ext.Array.slice( this.sprints, (this.sprints.length - 4)) var iterated_data = []; Ext.Array.each(summaryArray, function(summ){ Ext.Array.each(iteration_data, function(team) { if( summ == team.Name){ iterated_data.push(team); } }); }); Ext.Array.each(iteration_data, function(summ){ Ext.Array.each(iterated_data, function(team) { if (!summaryHash[team.ProjectName]) { summaryHash[team.ProjectName] = { Commit: 0, Accept: 0, Total: 0 }; }; if (!Ext.Array.contains(removable_teams, team.ProjectName)) { if( summ.ProjectName == team.ProjectName && summ.Name == team.Name) { summaryHash[team.ProjectName]["Commit"] += summ.Commit; summaryHash[team.ProjectName]["Accept"] += summ.Accept; if (summaryHash[team.ProjectName]["Commit"] != 0) { summaryHash[team.ProjectName]["Total"] = (summaryHash[team.ProjectName]["Accept"] / summaryHash[team.ProjectName]["Commit"] ) * 100; } else { summaryHash[team.ProjectName]["Total"] = 0; }; }; } }); }, this); Ext.Object.each(recordHash, function(key, value) { if (summaryHash[key]) { value["Summary"] = summaryHash[key].Total; records.push(value); } }); var cfgsValues = []; cfgsValues.push({text: 'Team', style:"background-color: #D2EBC8", dataIndex: 'Team', width: 170, renderer: function(value, meta_data, record, row, col) { if (Ext.Array.contains(parents, value)) { meta_data.style = "background-color: #FFF09E"; return Ext.String.format("<div style='font-weight:bold;text-align:center'>{0}</div>", value); } else if (rootParent == value){ meta_data.style = "background-color: #CC6699"; return Ext.String.format("<div style='font-weight:bold;text-align:center'>{0}</div>", value); } else { return value; }; }}); cfgsValues.push({text: '4 Sprint Summary', style:"background-color: #D2EBC8", width: 70, dataIndex: 'Summary', renderer: function(value, meta_data, record) { var color = null; if (value >= 80 && value <= 120) { color = "#00AF4F"; } else if (value >= 60 && value <= 80) { color = "#FBFE08"; } else if (value <= 60) { color = "#FC0002"; } else if (value >= 120) { color = "#98CCFB"; }; meta_data.style = "background-color: "+color+""; return Ext.Number.toFixed(value, 0)+"%"; }}); Ext.Array.each(this.sprints, function(sprint) { cfgsValues.push( {text: sprint, style:'background-color:#D2EBC8;text-align:center;font-weight:bold', defaults: {enableColumnHide:false}, columns:[ {text: "Commit", dataIndex: 'Commit-' + sprint, width: 50, renderer: function(value, meta_data, record) { if( value ) { return value; } else { return "NA"; } }}, {text: "Accept", dataIndex: 'Accept-' + sprint, width: 60, renderer: function(value, meta_data, record) { if( value) { return value; } else { return "NA"; } }}, {text: "%", dataIndex: 'Perc-'+ sprint, width: 50, renderer: function(value, meta_data, record) { var color = null; if (value >= 80 && value <= 120) { color = "#00AF4F"; } else if (value >= 60 && value <= 80) { color = "#FBFE08"; } else if (value <= 60) { color = "#FC0002"; } else if (value >= 120) { color = "#98CCFB"; } meta_data.style = "background-color: "+color+""; if (value) { return Ext.Number.toFixed(value, 0)+"%"; } else { return "NA"; }; }} ]} ); }); var chart = Ext.getCmp('mychart'); if (chart) { chart.destroy(); }; Ext.Array.each(this.sprints, function(sprint) { Ext.Array.each(records, function(record) { if (record["Accept-" + sprint] == undefined) { record["Accept-" + sprint] = undefined; } if (record["Commit-" + sprint] == undefined) { record["Commit-" + sprint] = undefined; } if (record["Perc-" + sprint] == undefined) { record["Perc-" + sprint] = undefined; } }); }); this.add({ xtype: 'rallygrid', id: 'mychart', store: Ext.create('Rally.data.custom.Store', { data: records, pageSize: 100 }), //viewConfig: { //stripeRows: false //}, columnCfgs: cfgsValues, //columnLines: true }); this.globalStore = Ext.getCmp('mychart'); console.log("this.globalStore", this.globalStore); this.down('#grid_box').add(this.globalStore); //this.setLoading(false); }, _addPrintButton: function() { var me = this; this.down('#print_button_box').add( { xtype: 'rallybutton', itemId: 'print_button', text: 'Export to Excel', disabled: false, margin: '20 10 10 0', region: "right", handler: function() { me._onClickExport(); } }); }, _onClickExport: function () { //using this function to export to csv var that = this; if (this.down('#grid_box')){ //Ext.getBody().mask('Exporting Tasks...'); //console.log('inside export'); setTimeout(function () { var template = '<html xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:x="urn:schemas-' + 'microsoft-com:office:excel" xmlns="http://www.w3.org/TR/REC-html40"><head>' + '<!--[if gte mso 9]><xml><x:ExcelWorkbook><x:ExcelWorksheets><x:ExcelWorksheet><x:Name>' + '{worksheet}</x:Name><x:WorksheetOptions><x:DisplayGridlines/></x:WorksheetOptions></x:ExcelWorksheet>' + '</x:ExcelWorksheets></x:ExcelWorkbook></xml><![endif]--></head><body><table>{table}' + '</table></body></html>'; var base64 = function (s) { return window.btoa(unescape(encodeURIComponent(s))); }; var format = function (s, c) { return s.replace(/{(\w+)}/g, function (m, p) { return c[p]; }); }; var table = that.getComponent('grid_box'); //console.log("Exporting table ",table); var excel_data = '<tr>'; Ext.Array.each(table.getEl().dom.outerHTML.match(/<span .*?x-column-header-text.*?>.*?<\/span>/gm), function (column_header_span) { excel_data += (column_header_span.replace(/span/g, 'td')); }); excel_data += '</tr>'; Ext.Array.each(table.getEl().dom.outerHTML.match(/<tr class="x-grid-row.*?<\/tr>/gm), function (line) { excel_data += line.replace(/[^\011\012\015\040-\177]/g, '>>'); }); //console.log("Excel data ",excel_data); var ctx = {worksheet: name || 'Worksheet', table: excel_data}; window.location.href = 'data:application/vnd.ms-excel;base64,' + base64(format(template, ctx)); Ext.getBody().unmask(); }, 500); }else{ console.log("grid_box does not exist"); } } 

在导出为CSV的新AppSDK2文档中有一个示例 。 我也有这个github回购导出到CSV的例子。