Как разделить шаблон FooterTemplate в сетке кендо на 2 строки в Excel Excel - Angular 6
У меня есть сетка в угловом проекте 6, нижний колонтитул в сетке содержит 2 типа данных: пользовательская сумма и пользовательское среднее значение, когда я говорю "пользовательский", я имею в виду, что у нас есть собственная логика того, как выполнять вычисления с данными сетки. так выглядит нижний колонтитул
Когда я экспортирую в Excel, нижний колонтитул экспортируется как 1 строка, и я хочу разделить его на 2 строки.
сам экспорт работает нормально, мне просто нужно разделить нижний колонтитул на 2 строки
Код нижнего колонтитула:
<ng-template kendoGridFooterTemplate let-dataItem let-column let-columnIndex="columnIndex" >
<div>
<span *ngIf="columnIndex === 2">{{'average' | translate}}</span>
<div *ngIf="item.avg">
<span [ngClass]="getAvg(item.field) > 0 ? 'green' : 'red' ">{{getAvg(item.field) | number: '2.'}}</span>
</div>
</div>
<div>
<span *ngIf="columnIndex === 2">{{'sum' | translate}}</span>
<div *ngIf="item.sum">
<span [ngClass]="getSum(item.field) > 0 ? 'green' : 'red' ">{{getSum(item.field) | number: '2.'}}</span>
</div>
</div>
</ng-template>
я уже пытался проверить, могу ли я добавить более 1 нижнего колонтитула, и я не смог найти никакой документации об этом
решение кого-то:)?
1 ответ
Я нашел решение, в onExcelExport(e: any) я могу получить доступ к ячейкам в листе Excel и отредактировать их, поэтому я просто удалил последнюю строку и вручную вставил нужные мне данные, чтобы код выглядел следующим образом:
настройки сетки: <kendo-grid *ngIf="gridData"
[data]="gridData"
[pageSize]="state.take"
[skip]="state.skip"
[sort]="state.sort"
[filter]="state.filter"
filterable="menu"
(filterChange)="filterChange($event)"
[navigable]="true"
(dataStateChange)="dataStateChange($event)"
[sortable]="{
allowUnsort: true,
mode:'multiple'} "
[selectable]="true"
(excelExport)="onExcelExport($event)">
функция выглядит так
onExcelExport(e: any) {
// delete last row in the excel sheet
const rows = e.workbook.sheets[0].rows;
rows.pop();
// push new row by initiate new cell array, looping throw state to get the the right field
const cellsSum = [];
const rowsLength = rows[rows.length - 1].cells.length;
for (let i = 0; i < rowsLength; i++) {
const field =
this.employeeColumnService.state.employeeDetailsColumns.find(x => x.title === rows[0].cells[i].value.toString()).field;
cellsSum.push({value: this.getSum(field)});
}
}
rows.push({type: "data", cells: cellsSum});