剑道网格导出到 Excel 货币格式

Posted

技术标签:

【中文标题】剑道网格导出到 Excel 货币格式【英文标题】:Kendo Grid Export To Excel Currency formatting 【发布时间】: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 很简单??

【问题讨论】:

【参考方案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
        

    
,

【讨论】:

以上是关于剑道网格导出到 Excel 货币格式的主要内容,如果未能解决你的问题,请参考以下文章

剑道网格导出日期格式不正确

在 Angular 2 中为多个动态剑道网格导出 excel

如何格式化gridview列?

无法导出剑道网格中的隐藏列

SQL Reporting Services - 导出到 Excel - 为啥选择“自定义”格式?

剑道网格日期格式