在Kendo网格Excel导出中显示隐藏列

4

我有一个kendo网格,我可以将其数据导出为Excel文件,没有任何问题。在我的网格中,一些列可能会被隐藏,因为它们没有任何值。但是,我希望即使这些隐藏的列(我指它们的标题)也出现在导出的Excel文件中。

以下是显示在我的Kendo网格配置中的Excel配置代码的一部分。

excel: {
         fileName: new Date().toString() + ".xlsx",
         allPages: true,
       },

非常感谢您的帮助。

3个回答

1
您可以在数组中定义 hidden: true,然后在导出之前遍历列数组并显示/隐藏列,如下所示:

您可以在数组中定义 hidden: true,然后在导出之前遍历列数组并显示/隐藏列,如下所示:

        function excelExport(e) {
              if (!exportFlag) {
                  for(var i=0; i < columns.length; i++) {
                      if(columns[i].hidden)
                          e.sender.showColumn(i);
                  }
                  e.preventDefault();
                  exportFlag = true;
                  setTimeout(function () {
                    e.sender.saveAsExcel();
                  });
                } else {
                    for(var i=0; i < columns.length; i++) {
                          if(columns[i].hidden)
                              e.sender.hideColumn(i);
                      }
                  exportFlag = false;
                }
      }

0

我想实现类似的功能,并使用@Ankur提供的答案进行了轻微修改,因为我需要在导出后再次隐藏列。

代码如下:

excelExport(e) {
                Spa.startLoading(); // loading overlay to hide the columns showing then hiding again
                var columns = e.sender.columns;
                var hiddenColumnNumbers = [];
                if (!exportFlag) {
                    for (let i = 0; i < columns.length; i++) {
                        if (columns[i].hidden) {
                            e.sender.showColumn(i);
                            hiddenColumnNumbers.push(i);
                        }
                    }
                    e.preventDefault();
                    exportFlag = true;
                    setTimeout(() => {
                        e.sender.saveAsExcel();
                        for (let j = 0; j < columns.length; j++) {
                            if (hiddenColumnNumbers.indexOf(j) > -1) {
                                e.sender.hideColumn(j);
                            }
                        }
                        Spa.stopLoading(); // hide loading overlay
                    });
                } else {
                    for (let k = 0; k < columns.length; k++) {
                        if (columns[k].hidden)
                            e.sender.hideColumn(k);
                    }
                    exportFlag = false;
                    Spa.stopLoading(); // hide loading overlay
                }
            },

0

你可以添加一些JavaScript来控制它。

var exportFlag = true;

$("#gridName").data("kendoGrid").bind("excelExport", function (e) {
    if (exportFlag) {
        e.sender.showColumn("hiddenColumnName");
        e.preventDefault();
        exportFlag = false;
        e.sender.saveAsExcel();
    } else {
        e.sender.hideColumn("hiddenColumnName");
        exportFlag = true;
    }
});

基本上,当您单击导出按钮并在触发saveAsExcel()函数保存文档之前,在您的网格中显示隐藏列时,此代码会捕获excelExport事件。然后再次隐藏该列。

这里有一个示例供您测试。


感谢您的回复。第一点是我希望隐藏列能够自动识别(而不是手动输入它们的名称!)。另外,附上的示例似乎不正确! - Pedram
好的,基本上我们需要一种方法来循环遍历每一列,并查看hidden属性是true还是false。我会进行一些研究,看看能否找出解决方法。示例有什么问题吗?网格中有3列,第3列被隐藏了。当单击“导出”按钮时,它会在Excel文档中显示隐藏的列。 - ShawnOrr
这个例子无法运行,因为 Telerik 在伊朗没有得到支持(任何直接从其网站的参考资料都不行)。我不得不使用代理才能看到 Excel 导出结果,现在它可以工作了。然而,第一个问题仍然存在。我希望即使是隐藏列也能自动出现在我的 Excel 文件中。 - Pedram
我不太清楚其他评论者的意思,但这个例子对我来说完美地运行了,并且是最正确的答案。 - Bobby

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接