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 期间操作网格列的主要内容,如果未能解决你的问题,请参考以下文章

如何在Kendo UI网格中自定义导出excel

Kendo UI for jQuery数据管理使用教程:PDF导出

在Kendo ui中,Excel导出无法使用jquery。

Kendo 导出到 PDF Unicode 支持

从 Kendo Grid 数据源导出所有数据

可以导出多个kendo网格以实现角度优势