Kendo UI:在导出到 excel 和 pdf 期间操作网格列
Posted
技术标签:
【中文标题】Kendo UI:在导出到 excel 和 pdf 期间操作网格列【英文标题】:Kendo UI: Manipulating grid columns during export to excel and pdf 【发布时间】:2021-11-14 07:42:20 【问题描述】:我有一个使用 Export-to-excel 和 Export-to-pdf 的 Kendo 网格。
一个特定的列包含填充零的数据(以便列排序工作)。然后,此列使用模板来显示没有填充零的数据(业务需求)。这非常适合网格。
现在,导出函数不会导出模板,它们会导出基础数据(这在已知限制中有记录)。所以我的导出显示带有填充零的数据。但是......我需要显示没有填充零的数据。所以我一直在寻找解决方法。
解决方法尝试 A) 我创建了两列填充和非填充。想法是这样的: 第 i 列 / 数据 = 填充;网格视图 = 未填充;不要出口。 列 ii/ 数据 = 未填充;网格视图=隐藏;导出。
但是,这不起作用有两个原因。 列 i/ 列:可导出: 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' 是没有填充零的字段。
【问题讨论】:
【参考方案1】:在 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+/, '')
您可以在以下示例中进行相同的测试:
https://dojo.telerik.com/ADIfarOp【讨论】:
嗨。您的 excelExport() 函数实际上并没有做任何事情。你可以知道,因为它包含一个错字。但是,我有点喜欢这种方法。你需要知道的一件事是我不能只替换所有的零。那是因为一些原始的“数字”确实有前导零。例如。其中一些看起来像“4567”,其中一些看起来像“067”。我将它们填充到“004567”和“000067”,以便剑道网格可以正确排序它们,但我仍然需要显示原始数字(实际上是数据库中的字符串)。 我不认为我的 sn-p 有错字,您实际上可以在提供的 dojo 中运行它。不过,您可以按照适合您的方式修改值,不必使用正则表达式。但是,建议的方法实际上会修改导出的文件。 我的朋友你拼写为“excelEcxport” :-) 但是,你是正确的,因为我可以拦截和操纵 row.cells[0].value。那是我需要的起点,我刚刚准备好一个工作版本。我只需要对 pdf-export 进行类似的操作,然后稍微整理一下。我稍后会发布(简化的)解决方案。感谢您为我指明正确的方向。【参考方案2】:感谢 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;
,
【讨论】:
以上是关于Kendo UI:在导出到 excel 和 pdf 期间操作网格列的主要内容,如果未能解决你的问题,请参考以下文章