今天做报表导出功能的时候,使用到了easyui 的 datagrid-export.js 来导出excel,使用起来非常简单
官方文档
http://www.jeasyui.net/extension/204.html
引入js文件
只需要一行代码即可
$('#dg').datagrid('toExcel','Android订阅报表.xls');
使用起来发现一个问题,就是多出来了一个 undefined 列,原因是因为我在表格前面加了一个选择框,可是非常难看,我想删除这列,又不想删除选择框,想了很久,查了很长时间的资料都没有解决,
于是看 datagrid-export.js 源码找到了答案,源码中 toHtml就是关键方法
function toHtml(target, rows){
rows = rows || getRows(target);
var dg = $(target);
var data = ['<table border="1" rull="all" style="border-collapse:collapse">'];
var fields = dg.datagrid('getColumnFields',true).concat(dg.datagrid('getColumnFields',false));
var trStyle = 'height:32px';
var tdStyle0 = 'vertical-align:middle;padding:0 4px';
data.push('<tr style="'+trStyle+'">');
for(var i=0; i<fields.length; i++){
var col = dg.datagrid('getColumnOption', fields[i]);
var tdStyle = tdStyle0 + ';width:'+col.boxWidth+'px;';
data.push('<th style="'+tdStyle+'">'+col.title+'</th>');
}
data.push('</tr>');
$.map(rows, function(row){
data.push('<tr style="'+trStyle+'">');
for(var i=0; i<fields.length; i++){
var field = fields[i];
data.push(
'<td style="'+tdStyle0+'">'+row[field]+'</td>'
);
}
data.push('</tr>');
});
data.push('</table>');
return data.join('');
}
方法很简单,就是读取 datagrid 列和行的值,导入到excel
要想实现删除指定行只需要改一点点就可以了,在两个for循环加一个标题值的判断即可.
function toHtml(target, rows){
rows = rows || getRows(target);
var dg = $(target);
var data = ['<table border="1" rull="all" style="border-collapse:collapse">'];
var fields = dg.datagrid('getColumnFields',true).concat(dg.datagrid('getColumnFields',false));
var trStyle = 'height:32px';
var tdStyle0 = 'vertical-align:middle;padding:0 4px';
data.push('<tr style="'+trStyle+'">');
for(var i=0; i<fields.length; i++){
var col = dg.datagrid('getColumnOption', fields[i]);
var tdStyle = tdStyle0 + ';width:'+col.boxWidth+'px;';
//隐藏空列
if(col.title===undefined) {
continue;
}
data.push('<th style="' + tdStyle + '">' + col.title + '</th>');
}
data.push('</tr>');
$.map(rows, function(row){
data.push('<tr style="'+trStyle+'">');
for(var i=0; i<fields.length; i++){
var field = fields[i];
//隐藏空列
var col = dg.datagrid('getColumnOption', fields[i]);
if(col.title===undefined) {
continue;
}
data.push(
'<td style="'+tdStyle0+'">'+row[field]+'</td>'
);
}
data.push('</tr>');
});
data.push('</table>');
return data.join('');
}
如果想要删除指定的列,只需要在判断中加入指定的值即可