2017-07-04 4 views

Répondre

2

Voici la solution que j'ai implémentée. Les pieds de page de grille, les en-têtes multiples ne sont pas pris en compte ici. Ce code est pour une grille simple avec des en-têtes et des lignes en-dessous. En cas de défilement infini et de colonnes dynamiques (dans certains cas, les colonnes peuvent être modifiées).

var LINE_SEPARATOR = '\r\n'; 
var COLUMN_SEPARATOR = ','; 
var fileName = 'export.csv'; 

let csvString = ''; 
let columnsToExport = this.gridOptions.api.columnController.getAllDisplayedColumns(); 

// adding column headers. 
columnsToExport.map((column) => { 
    csvString+= column.colDef.headerName; 
    csvString+= COLUMN_SEPARATOR; 
}); 
csvString+= LINE_SEPARATOR; 

// adding content of data currently loaded in the grid. 
this.gridOptions.api.forEachNode(function(node) { 
    node.columnController.allDisplayedColumns.map((column) => { 
    let cellContent = node.valueService.getValue(column, node); 
    csvString+= (cellContent != null) ? cellContent : ""; 
    csvString+= COLUMN_SEPARATOR; 
    }); 
    csvString+= LINE_SEPARATOR; 
}); 

// for Excel, we need \ufeff at the start 
var blobObj = new Blob(["\ufeff", csvString], { 
    type: "text/csv;charset=utf-8;" 
}); 
// Internet Explorer 
if (window.navigator.msSaveOrOpenBlob) { 
    window.navigator.msSaveOrOpenBlob(blobObj, fileName); 
} 
else { 
    // Chrome 
    var downloadLink = document.createElement("a"); 
    downloadLink.href = window.URL.createObjectURL(blobObj); 
    downloadLink.download = fileName; 
    document.body.appendChild(downloadLink); 
    downloadLink.click(); 
    document.body.removeChild(downloadLink); 
}