Я пытаюсь заставить работать асинхронный экспорт Excel в одной из наших сеток, но постоянно получаю файл пустой xsls с только заголовки коллекции.
Данные правильно отображается в сетке, с фильтрацией и разбиением на страницы.
Я безуспешно пытался следовать документам здесь, вот моя реализация:
Соответствующие части в моем component.ts:
@Input() collection$: Observable<User[]>;
ngOnInit() {
this.allData = this.allData.bind(this);
}
allData(): Observable<GridDataResult> {
return this.collection$.pipe(
map(users => ({ data: users, total: users.length }))
);
}
Первое, что я попытался, это напрямую вернуть this.collection$;, но поведение было таким же: пустая коллекция внутри файла excel, поэтому вместо этого я попытался вернуть Observable<GridDataResult>, но безуспешно.
Соответствующие части в моем component.html:
<kendo-grid
[kendoGridBinding] = "collection$ | async"
pageSize = "10"
[pageable] = "true"
[filterable] = "true"
>
<ng-template kendoGridToolbarTemplate>
<button type = "button" kendoGridExcelCommand icon = "file-excel">
Export to Excel
</button>
</ng-template>
<!-- columns -->
<kendo-pager-prev-buttons></kendo-pager-prev-buttons>
<kendo-pager-info></kendo-pager-info>
<kendo-pager-next-buttons></kendo-pager-next-buttons>
<kendo-pager-page-sizes [pageSizes] = "[5, 10, 40]"></kendo-pager-page-sizes>
<kendo-grid-excel
fileName = "Users.xlsx"
[fetchData] = "allData"
></kendo-grid-excel>
</kendo-grid>
Может кто-нибудь пролить некоторый свет на это? Заранее спасибо.
@codingbadger забудьте о users$, это должен быть collection$ (сейчас отредактирую). collection$ — это наблюдаемый объект, возвращаемый службой и передаваемый компоненту сетки из его родительского компонента-контейнера.





Если вы добавите пакет @progress/kendo-angular-excel-export и измените свою функцию allData() на:
public allData(): ExcelExportData {
const result: ExcelExportData = {
data: this.collection$.pipe(
map(users => ({ data: users, total: users.length })).data
};
return result;
}
Это должно работать
Это вызывает различные ошибки компилятора TS. Некоторое приведение типов может исправить ошибки, но проблема все еще сохраняется, по-видимому, проблема связана с версией rxjs. Спасибо за помощь в любом случае, ценю это.
Видимо это из-за версии rxjs:
https://github.com/telerik/kendo-angular/issues/1962
Удаление rxjs и rxjs-compat в 6.2.2 устранило проблему.
ОБНОВИТЬ
Переход на 6.4.0 также устраняет проблему.
Спасибо, что добавили свой собственный ответ, сегодня я столкнулся с точно такой же проблемой. Замена rxjs и rxjs-compat на 6.4.0 также устраняет эту проблему.
Вы правы, теперь я добавлю это и к ответу. Спасибо!
Где вы заполняете
collection$иusers$?