2016-07-17 12 views
2

Ich habe ein Kendo-Gitter und kann seine Daten problemlos in die Excel-Datei exportieren. In meinem Raster können einige Spalten ausgeblendet sein, da sie keinen Wert haben. Ich möchte jedoch auch diese versteckten Spalten (ich meine ihre Kopfzeile) in meiner exportierten Excel-Datei sein.Versteckte Spalten in Kendo anzeigen grid excel export

Hier ist ein Stück Code, der die Excel-Konfiguration in meiner Kendo-Grid-Konfiguration zeigt.

excel: { 
     fileName: new Date().toString() + ".xlsx", 
     allPages: true, 
     }, 

Jede Hilfe wäre willkommen.

Antwort

-1

Sie können Javascript hinzufügen, um dies zu kontrollieren.

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; 
    } 
}); 

Im Grunde ist dies fängt das excelExport Ereignis, wenn Sie auf die Schaltfläche Export klicken und zeigen die ausgeblendete Spalte in Ihrem Raster, bevor es die saveAsExcel() Funktion ausgelöst, die Ihr Dokument speichert. Dann blendet es die Spalte wieder aus.

Hier ist ein Example, mit dem Sie testen können.

+0

Vielen Dank für Ihre Antwort. Der erste Punkt ist, dass ich möchte, dass die versteckten Spalten automatisch erkannt werden (nicht manuell, indem Sie ihren Namen eingeben!). P.S. das von Ihnen angegebene Beispiel scheint nicht korrekt zu sein! – Pedram

+0

Ok, also im Grunde brauchen wir einen Weg, um jede Spalte durchzuschleifen und zu sehen, ob die "versteckte" Eigenschaft "wahr" oder "falsch" ist. Ich werde ein wenig nachforschen, um zu sehen, ob ich das herausfinden kann. Was ist falsch an dem Beispiel? Es gibt 3 Spalten im Raster und die 3. Spalte ist ausgeblendet. Wenn Sie auf die Schaltfläche Exportieren klicken, wird die ausgeblendete Spalte im Excel-Dokument angezeigt. – Supersnake

+0

Das Beispiel hat nicht funktioniert, weil Telerik im Iran nicht unterstützt wird! (jede Referenz direkt von seiner Website). Ich musste einen Proxy verwenden, um das Excel-Exportergebnis zu sehen, und jetzt funktioniert es. Das erste Problem besteht jedoch immer noch. Ich möchte sogar versteckte Spalten automatisch in meiner Excel-Datei. – Pedram

1

Sie können Spalten in einem Array haben, die versteckt definiert: true und dann überqueren einfach durch Spalten-Array und Spalten anzeigen/ausblenden kurz vor Export, wie folgend:

 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; 
       } 
     } 
0

Ich suchte eine ähnliche Sache zu erreichen und Ich benutzte die Antwort von @Ankur mit einer leichten Änderung, da ich die Spalten nach dem Export wieder ausblenden musste.

-Code wie folgt:

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 
       } 
      },