#primeng #xlsx #primeng-datatable
Вопрос:
У меня есть красивый результат таблицы с датами
Функция экспорта ссылается на официальный документ https://www.primefaces.org/primeng/showcase/#/table/export. К сожалению, в поле даты нет ни одного примера.
Ниже приведен мой шаблон
<p-table [columns]="appResults.output.cols" [value]="appResults.output.data">
<ng-template pTemplate="caption">
<div class="p-d-flex">
<button type="button" pButton pRipple icon="pi pi-file-excel" (click)="exportExcel()"
class="p-button-success p-mr-2" pTooltip="XLS" tooltipPosition="bottom"></button>
</div>
</ng-template>
<ng-template pTemplate="header" let-columns>
<tr>
<th *ngFor="let col of columns">
{{col.header}}
</th>
</tr>
</ng-template>
<ng-template pTemplate="body" let-rowData let-columns="columns">
<tr>
<td *ngFor="let col of columns" [ngSwitch]="col.type">
<div *ngSwitchCase="'currency'" align="right">{{rowData[col.field].toFixed(2)}}
</div>
<div *ngSwitchCase="'number'" align="right">{{rowData[col.field]}}</div>
<div *ngSwitchCase="'string'">{{rowData[col.field]}}</div>
<div *ngSwitchCase="'boolean'">{{rowData[col.field]? "Y":"N"}}</div>
<div *ngSwitchCase="'date'">{{rowData[col.field].seconds * 1000|date:'MMM d, yyyy' }}</div>
<div *ngSwitchCase="'timestamp'">{{rowData[col.field].seconds * 1000|date:'MMM d, yyyy HH:mm:ss' }}
</div>
<div *ngSwitchCase="'checkbox'" align="center">{{rowData[col.field]? "Y":"N"}}</div>
<!-- note: geoPoints is currently not supported in export. Content will be BLANK in exported file, expected behaviour -->
<div *ngSwitchCase="'geopoints'" align="center">
<div *ngIf="rowData[col.field]">
<a href="https://www.google.com/maps/place/{{rowData[col.field].latitude}},{{rowData[col.field].longitude}}/@18"
target="_blank">location</a>
</div>
</div>
<div *ngSwitchCase="'link'">
<a href="{{rowData[col.field]}}" target="_blank">{{col.label}}</a>
</div>
</td>
</tr>
</ng-template>
</p-table>
Извините за длинный фрагмент кода, и единственное внимание уделяется полю даты
<div *ngSwitchCase="'date'">{{rowData[col.field].seconds * 1000|date:'MMM d, yyyy' }}</div>
Данные правильно отображаются на веб-странице. Но после загрузки в EXCEL поле даты просто ПУСТОЕ
Ниже приведена логика экспорта
exportExcel() {
import("xlsx").then(xlsx => {
const worksheet = xlsx.utils.json_to_sheet(this.appResults.output.data);
const workbook = { Sheets: { 'data': worksheet }, SheetNames: ['data'] };
const excelBuffer: any = xlsx.write(workbook, { bookType: 'xlsx', type: 'array' });
this.saveAsExcelFile(excelBuffer, "Results");
});
}