【问题标题】:Kendo Grid Export To Excel Currency formatting剑道网格导出到 Excel 货币格式
【发布时间】:2017-10-25 11:09:10
【问题描述】:

我正在尝试将我的剑道网格导出到 Excel。它工作正常,除了格式丢失。我认为是因为我使用的是模板。

The Telerik documentation 明确声明:

要在将表格导出到 Excel 期间格式化单元格值,请设置 单元格的格式选项。

这个我试过了,还是不行:

columns: [
    {
        field: "EntryWage",
        headerTemplate: entryLevelWageColumnHeading + "<span name='EntryWage' class='k-icon k-i-close remove' style='float: right;'></span>",
        width: 125,
        attributes: { style: "text-align:right;" },
        format: "{0:c}",
        template: "#= (EntryWage != null) ? kendo.toString(EntryWage, 'C') : 'N/A' #"
    }];    

我也有这个功能(用于excel网格定义):

    excelExport: function (e) {
        var sheet = e.workbook.sheets[0];
        var row = sheet.rows[0];
        $("#grid .k-grid-header .k-link").each(function (index) { //for each column header in the grid...
            row.cells[index].value = $(this).text(); //set cell text from grid column text
            row.cells[index].background = "#0070C0"; //set cell to "blue" color
        });
    },

我需要在这里解析每个单元格吗?难道我做错了什么?我认为这真的很简单,因为整个导出到 Excel 很简单??

【问题讨论】:

    标签: c# jquery kendo-ui kendo-grid


    【解决方案1】:

    我认为template 不会对导出的数据产生任何影响(因为excelExport 基于dataSource)。

    这是一个 working example of excelExport 的 jsFiddle,它改变了每个 cell 的格式。

    注意excelExport代码的区别:

    excelExport: function(e) {      
      var sheet = e.workbook.sheets[0];
    
      for (var rowIndex = 0; rowIndex < sheet.rows.length; rowIndex++) {
        var row = sheet.rows[rowIndex];        
        for (var cellIndex = 0; cellIndex < row.cells.length; cellIndex++) {
            var cell = row.cells[cellIndex];
            if (row.type === "data") {
                //if (cellIndex == 2) { 
                if (sheet.rows[0].cells[cellIndex].value == "unitPrice") {// like this
                    cell.format = "number";
                    cell.background = "#0070C0"
                    cell.hAlign = "right";
                }
            }
        }      
      }
    

    【讨论】:

    • 感谢您的简单建议。我最终以类似方式解决了它(见下文)。
    【解决方案2】:

    我最终按照 Sandman 的建议解决了这个问题。我的输出格式基于字段名称,来自每一列(输入)。

    我还将网格的列标题附加到 Excel 列标题行。剑道还没有做到这一点有点遗憾。

    excelExport: function (e) {  
        var sheet = e.workbook.sheets[0];
        var row = sheet.rows[0];
    
        //Excel output - create a header row
        $("#grid .k-grid-header .k-link").each(function (index) { //for each column header in the grid...
            row.cells[index].value = $(this).text(); //set cell text from grid column text
            row.cells[index].background = "#0070C0"; //set cell to "blue" color
        });
    
        //Excel output - column formatting
        var formatMask = null;
        for (var rowIndex = 1; rowIndex < sheet.rows.length; rowIndex++) { //begin on first row (skip header)
            row = sheet.rows[rowIndex];
            for (var cellIndex = 0; cellIndex < row.cells.length; cellIndex++) { //for each row, check each cell by field name
                switch (this.columns[cellIndex].field) {
                    case "Field1":
                        formatMask = "###,##0";
                        break;
                    case "Field2":
                        formatMask = "$#,##0";
                        break;
                    case "Field3":
                        formatMask = "$#,##0";
                        break;
                    case "Field4":
                        formatMask = "###,##0";
                        break;
                    case "Field5":
                        formatMask = "###,##0";
                        break;
                    case "Field6":
                        formatMask = "###,##0";
                        break;
                    case "Field7":
                        formatMask = null;
                        row.cells[cellIndex].value = row.cells[cellIndex].value;
                        break;
                    case "Field8":
                        formatMask = "###,##0";
                        break;
                    case "Field9":
                        formatMask = "###,##0";
                        break;
                    case "Field10":
                        formatMask = "###,##0";
                        break;
                    case "Field11":
                        formatMask = "###,##0";
                        break;
                    case "Field12":
                        if (row.cells[cellIndex].value === false) {
                            row.cells[cellIndex].value = "No";
                        } else {
                            row.cells[cellIndex].value = "Yes";
                        }
                        break;
                    default:
                        break;
                }
                row.cells[cellIndex].format = formatMask; //apply column format mask
            }
    
        }
    },
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-12-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多