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;
    }
},