在Kendo grid excel导出中显示隐藏的列

时间:2016-07-17 10:43:28

标签: excel kendo-grid export-to-excel

我有一个kendo网格,我可以毫无问题地将其数据导出到excel文件中。在我的网格中,某些列可能会被隐藏,因为它们没有任何值。但是,我甚至想要这些隐藏的列(我的意思是它们的标题)在我导出的excel文件中。

这是一段显示我的Kendo网格配置中的excel配置的代码。

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

任何帮助都将不胜感激。

3 个答案:

答案 0 :(得分:1)

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

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

答案 1 :(得分: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
                }
            },

答案 2 :(得分:-1)

您可以添加一些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;
    }
});

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

以下是您可以测试的Example

相关问题