我有一个kendo网格,我可以毫无问题地将其数据导出到excel文件中。在我的网格中,某些列可能会被隐藏,因为它们没有任何值。但是,我甚至想要这些隐藏的列(我的意思是它们的标题)在我导出的excel文件中。
这是一段显示我的Kendo网格配置中的excel配置的代码。
excel: {
fileName: new Date().toString() + ".xlsx",
allPages: true,
},
任何帮助都将不胜感激。
答案 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。