Kendo UI:在导出到 excel 和 pdf 期间操纵网格列
Kendo UI: Manipulating grid columns during export to excel and pdf
我有一个使用 Export-to-excel 和 Export-to-pdf 的 Kendo 网格。
一个特定的列由带有填充零的数据组成(以便列排序有效)。然后,此列使用模板显示没有填充零的数据(业务需求)。这非常适合网格。
现在,导出函数不导出模板,它们导出基础数据(这在已知限制中有记录)。所以我的导出显示带有填充零的数据。但是......我需要显示没有填充零的数据。所以我一直在寻找解决方法。
解决方法尝试 A)
我创建了两列填充和非填充。这个想法是这样的:
列 i/ 数据 = 填充;网格视图 = 非填充;不要出口。
第 ii 列/数据 = 未填充;网格视图=隐藏;导出。
但是,这行不通有两个原因。
Column i/ columns: exportable: { pdf: false, excel: false } 实际上似乎不起作用(!!!)
第 ii 列/无论如何这都不合法。如果您将数据隐藏在网格中,则无论如何都无法导出它。
解决方法尝试 B)
在 excelExport() 函数中我这样做了:
excelExport: function (e) {
for (var j = 0; j < e.data.length; j++) {
e.data[j].padded_column = e.data[j].non-padded_column;
}
},
在控制台中这似乎工作正常,即我用非填充列的数据替换了填充列的值。但是,这对电子表格上显示的内容没有影响。我的猜测是,这是因为在 excelExport() 修改数据之前已经生成了电子表格。
所以,我需要一种新方法。有人可以帮忙吗?
附加信息
为了进一步参考,这里是该列的代码:
columns: [{
field: 'sys_id_sorted',
title: 'File ref',
hidden: false,
template: function (dataItem) {
var ctyClass = '';
switch (dataItem.cty_id) {
case '1':
ctyClass = 'CHAP';
break;
case '2':
ctyClass = 'EU-PILOT';
break;
case '3':
ctyClass = 'NIF';
break;
case '4':
ctyClass = 'OTHER';
break;
default:
ctyClass = 'default';
break;
}
return '<div class="label label-' + ctyClass + ' origin">' + dataItem.sys_id + '</div>';
}
},
'sys_id_sorted' 是填充了零的字段。
'dataItem.sys_id' 是没有填充零的字段。
在excelExport事件中,您可以访问工作簿,因此,您可以修改如下:
var sheet = e.workbook.sheets[0];
for (var i = 1; i < sheet.rows.length; i++) {
var row = sheet.rows[i];
row.cells[0].value = row.cells[0].value.replace(/^0+/, '')
}
您可以在以下示例中进行相同的测试:
感谢 Georgi Yankov 为我指明了正确的方向。解决方案是操纵在 e.workbook 中找到的值,而不是 e.data。这是我的(为简洁起见进行了简化)解决方案。循环内的四个变量只是简单地操纵字符串来创建我的非填充版本。 'row.cells[0].value' 是原始的零填充字符串。数据替换发生在最后一行:
excelExport: function (e) {
var sheet = e.workbook.sheets[0];
for (var k = 1; k < sheet.rows.length; k++) {
var row = sheet.rows[k];
var sys_id_sorted = row.cells[0].value;
var caseNum = sys_id_sorted.substring(9);
var caseNumTrimmed = caseNum.replace(/^0+/, '');
row.cells[0].value = sys_id_sorted.substring(0,9) + caseNumTrimmed;
}
},
我有一个使用 Export-to-excel 和 Export-to-pdf 的 Kendo 网格。
一个特定的列由带有填充零的数据组成(以便列排序有效)。然后,此列使用模板显示没有填充零的数据(业务需求)。这非常适合网格。
现在,导出函数不导出模板,它们导出基础数据(这在已知限制中有记录)。所以我的导出显示带有填充零的数据。但是......我需要显示没有填充零的数据。所以我一直在寻找解决方法。
解决方法尝试 A) 我创建了两列填充和非填充。这个想法是这样的: 列 i/ 数据 = 填充;网格视图 = 非填充;不要出口。 第 ii 列/数据 = 未填充;网格视图=隐藏;导出。
但是,这行不通有两个原因。 Column i/ columns: exportable: { pdf: false, excel: false } 实际上似乎不起作用(!!!) 第 ii 列/无论如何这都不合法。如果您将数据隐藏在网格中,则无论如何都无法导出它。
解决方法尝试 B) 在 excelExport() 函数中我这样做了:
excelExport: function (e) {
for (var j = 0; j < e.data.length; j++) {
e.data[j].padded_column = e.data[j].non-padded_column;
}
},
在控制台中这似乎工作正常,即我用非填充列的数据替换了填充列的值。但是,这对电子表格上显示的内容没有影响。我的猜测是,这是因为在 excelExport() 修改数据之前已经生成了电子表格。
所以,我需要一种新方法。有人可以帮忙吗?
附加信息
为了进一步参考,这里是该列的代码:
columns: [{
field: 'sys_id_sorted',
title: 'File ref',
hidden: false,
template: function (dataItem) {
var ctyClass = '';
switch (dataItem.cty_id) {
case '1':
ctyClass = 'CHAP';
break;
case '2':
ctyClass = 'EU-PILOT';
break;
case '3':
ctyClass = 'NIF';
break;
case '4':
ctyClass = 'OTHER';
break;
default:
ctyClass = 'default';
break;
}
return '<div class="label label-' + ctyClass + ' origin">' + dataItem.sys_id + '</div>';
}
},
'sys_id_sorted' 是填充了零的字段。 'dataItem.sys_id' 是没有填充零的字段。
在excelExport事件中,您可以访问工作簿,因此,您可以修改如下:
var sheet = e.workbook.sheets[0];
for (var i = 1; i < sheet.rows.length; i++) {
var row = sheet.rows[i];
row.cells[0].value = row.cells[0].value.replace(/^0+/, '')
}
您可以在以下示例中进行相同的测试:
感谢 Georgi Yankov 为我指明了正确的方向。解决方案是操纵在 e.workbook 中找到的值,而不是 e.data。这是我的(为简洁起见进行了简化)解决方案。循环内的四个变量只是简单地操纵字符串来创建我的非填充版本。 'row.cells[0].value' 是原始的零填充字符串。数据替换发生在最后一行:
excelExport: function (e) {
var sheet = e.workbook.sheets[0];
for (var k = 1; k < sheet.rows.length; k++) {
var row = sheet.rows[k];
var sys_id_sorted = row.cells[0].value;
var caseNum = sys_id_sorted.substring(9);
var caseNumTrimmed = caseNum.replace(/^0+/, '');
row.cells[0].value = sys_id_sorted.substring(0,9) + caseNumTrimmed;
}
},