我正在尝试使用 Grid 组件的内置支持导出到 excel,应用自定义单元格格式,如这些 Telerik 文档中所示:
http://docs.telerik.com/kendo-ui/controls/data-management/grid/how-to/excel/cell-format
在导出中使用硬编码行/单元格索引的方法在导出显示先前隐藏列的网格时会出现一个相当明显的问题 - 重现的最佳方法是参考这个 jsfiddle:
https://jsfiddle.net/3anqpnqt/1/
- 运行小提琴
- 单击导出到 excel - 观察自定义数字格式
- 取消隐藏子类别列(使用列菜单)
- 单击导出到 excel - 观察第 2 列上的自定义数字格式,该列现在是“子类别”
参考小提琴中的这段代码:
$("#grid").kendoGrid({
toolbar: ["excel"],
excel: {
fileName: "Grid.xlsx",
filterable: true
},
columns: [
{ field: "productName" },
{ field: "category" },
{ field: "subcategory", hidden: true },
{ field: "unitPrice"}
],
dataSource: [
{ productName: "Tea", category: "Beverages", subcategory: "Bev1", unitPrice: 1.5 },
{ productName: "Coffee", category: "Beverages", subcategory: "Bev2", unitPrice: 5.332 },
{ productName: "Ham", category: "Food", subcategory: "Food1", unitPrice: -2.3455 },
{ productName: "Bread", category: "Food", subcategory: "Food2", unitPrice: 6 }
],
columnMenu: true,
excelExport: function(e) {
var sheet = e.workbook.sheets[0];
for (var rowIndex = 0; rowIndex < sheet.rows.length; rowIndex++) {
var row = sheet.rows[rowIndex];
var numericFormat = "#,##0.00;[Red](#,##0.00);-";
for (var cellIndex = 0; cellIndex < row.cells.length; cellIndex++) {
var cell = row.cells[cellIndex];
if (row.type === "data") {
if (cellIndex == 2) { // how are we able to identify the column without using indexes?
cell.format = numericFormat;
cell.hAlign = "right";
}
}
}
}
}
});
我需要做的是将单元格标识为“unitPrice”并应用格式,但是在excelExport
处理程序中检查对象模型并没有给我任何方法来建立这个链接。在我的实际应用程序中,我有几种自定义格式要应用(百分比、n0、n2 等),所以它不像去$.isNumeric(cell.value)
或其他那样简单。
更新
我还需要使用列/行组的解决方案,这会在 Excel 模型中生成额外的标题行/列。