Я хочу добавить несколько настраиваемых столбцов в таблицу PrimeNG. Не могли бы вы мне подсказать, как мы можем добавить какое-то другое поле в экспорт CSV, но этот столбец не добавляется в таблицу My Dashboard.

0
Ajeet Kumar 20 Дек 2019 в 15:58

1 ответ

Есть пример кода, который сохраняет таблицу за столбцом в качестве основы. Я использовал оригинальный метод реализации PrimeGn exportCSV ({selectionOnly: true}) (экспорт выбранной строки)

Для полной демонстрации смотрите https://stackblitz.com/edit/angular-table-ecport-by-column

ключевой метод - exportCSV

exportCSV(table: Table){
    var _this = this;
    var selColumns = this.selectedColumns;
    var csv = '';
    var exportFilename = 'download';
    var csvSeparator = ',';
    //headers
        for (var i = 0; i < selColumns.length; i++) {
            var column = selColumns[i];
            if (column.exportable !== false && column.field) {
                csv += '"' + (column.header || column.field) + '"';
                if (i < (selColumns.length - 1)) {
                    csv += csvSeparator;
                }
            }
        }
        //body
        this.carsData.forEach(function (record, i) {
            csv += '\n';

                for (var i_1 = 0; i_1 < table.columns.length; i_1++) {
                const column = table.columns[i_1]; 
                var showColumn = selColumns.find(x=> column.field === x.field);

                if (column.exportable !== false && column.field && showColumn != null) {
                    // var cellData = JSON.stringify(record, column.field);
                     var cellData;
                     Object.keys(record).forEach(key =>{
                       if(key === column.field){
                         cellData = record[key];
                       }
                         })

                    //  console.log(cellData);
                    if (cellData != null) {
                        if (table.exportFunction) {
                            cellData = table.exportFunction({
                                data: cellData,
                                field: column.field
                            });
                        }
                        else
                            cellData = String(cellData).replace(/"/g, '""');
                    }
                    else
                        cellData = '';
                    csv += '"' + cellData + '"';
                    if (i_1 < (table.columns.length - 1)) {
                        csv += csvSeparator;
                    }
                }
            }

        });
        var blob = new Blob([csv], {
            type: 'text/csv;charset=utf-8;'
        });
        if (window.navigator.msSaveOrOpenBlob) {
            navigator.msSaveOrOpenBlob(blob, exportFilename + '.csv');
        }
        else {
            var link = document.createElement("a");
            link.style.display = 'none';
            document.body.appendChild(link);
            if (link.download !== undefined) {
                link.setAttribute('href', URL.createObjectURL(blob));
                link.setAttribute('download', exportFilename + '.csv');
                link.click();
            }
            else {
                csv = 'data:text/csv;charset=utf-8,' + csv;
                window.open(encodeURI(csv));
            }
            document.body.removeChild(link);
        }
 }
0
Maria Finkelstein 26 Дек 2019 в 17:33