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

在Kendo网格excel导出中显示隐藏列,excel,kendo-grid,export-to-excel,Excel,Kendo Grid,Export To Excel,我有一个剑道网格,我可以将其数据导出到excel文件中,没有任何问题。在我的网格中,某些列可能被隐藏,因为它们没有任何值。但是,我希望这些隐藏的列(我指的是它们的标题)都在我导出的excel文件中 下面是一段代码,显示了我的剑道网格配置中的excel配置 excel: { fileName: new Date().toString() + ".xlsx", allPages: true, }, 任何帮助都将不胜感激。您可以添加一些javascr

我有一个剑道网格,我可以将其数据导出到excel文件中,没有任何问题。在我的网格中,某些列可能被隐藏,因为它们没有任何值。但是,我希望这些隐藏的列(我指的是它们的标题)都在我导出的excel文件中

下面是一段代码,显示了我的剑道网格配置中的excel配置

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

任何帮助都将不胜感激。

您可以添加一些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
事件。然后它再次隐藏该列


这是一个可以使用的测试。

您可以在定义隐藏: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;
                }
      }
函数excelExport(e){
如果(!exportFlag){
对于(var i=0;i
我希望实现类似的效果,并使用@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
                }
            },
excelExport(e){
Spa.startLoading();//加载覆盖以隐藏显示的列,然后再次隐藏
var columns=e.sender.columns;
var HiddenColumnNumber=[];
如果(!exportFlag){
for(设i=0;i{
e、 sender.saveAsExcel();
for(设j=0;j-1){
e、 发送方:hideColumn(j);
}
}
Spa.stopLoading();//隐藏加载覆盖
});
}否则{
for(设k=0;k
感谢您的回复。第一点是,我希望自动识别隐藏列(而不是手动输入它们的名称!)。另外,您提供的示例似乎不正确!好的,所以基本上我们需要一种方法来循环遍历每一列,看看
hidden
属性是
true
还是
false
。我会做些调查看看能不能弄明白。这个例子有什么问题?网格中有3列,第3列隐藏。当您单击导出按钮时,它会显示excel文档中的隐藏列。该示例不起作用,因为伊朗不支持Telerik!(直接从其网站上引用)。我不得不使用代理来查看excel导出结果,现在它正在工作。然而,第一个问题仍然存在。我甚至想在我的excel文件中自动隐藏列。我真的不知道其他评论员的意思,这个例子对我来说非常有效,是最正确的答案。