2017-05-24 33 views
2

我想將我的Kendo網格導出爲ex​​cel。它工作正常,除了格式化丟失。我認爲這是因爲我正在使用模板。Kendo網格導出爲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文件格defintiion):

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是直接的?

回答

2

我不認爲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"; 
      } 
     } 
    }  
    } 
+0

感謝您的簡單建議。我最終以類似的方式解決它(見下文)。 – AussieJoe

3

我結束了類似的解決它睡魔的建議。我基於每個列(輸入)的字段名稱來輸出格式。

我還將網格的列標題附加到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 
     } 

    } 
},