Разбитый на страницы Flutter SfDataGrid Экспорт всех данных
Я использую SfDataGrid с нумерацией страниц, и я хотел бы экспортировать все данные не только на текущую страницу, но я не смог добиться этого правильно.
Мой текущий код ниже.
final excel.Workbook workbook = excel.Workbook();
for (var i = 0; i < viewModel.pagedRows.length; i++) {
final page = viewModel.pagedRows[i];
final excel.Worksheet worksheet = i == 0 ? workbook.worksheets[0] : workbook.worksheets.addWithName(i.toString());
key.currentState!.exportToExcelWorksheet(worksheet, rows: page);
}
final List<int> bytes = workbook.saveAsStream();
workbook.dispose();
writeToFile('DataGrid.xlsx', bytes);
Share.shareFiles([await getFilePath('DataGrid.xlsx')],
subject: 'Exported Excel',
mimeTypes: ['application/vnd.openxmlformats-officedocument.spreadsheetml.sheet', 'application/vnd.ms-excel']);
С помощью этого кода я могу правильно экспортировать данные с разбивкой на страницы на связанные рабочие листы. Но проблема заключается в итоговых строках, потому что система экспорта использует сводные значения текущей видимой страницы сетки данных при экспорте, и это вызывает ошибки данных в экспортированном файле.
я думаю, что я должен использоватьDataGridToExcelConverter
и вмешиваться в процесс экспорта, однако я не нашел способа сделать это.
1 ответ
После хорошего сна я решил свою проблему, и, как я догадался, она была решена с помощьюDataGridToExcelConverter
.
CustomDataGridToExcelConverter converter = CustomDataGridToExcelConverter();
final excel.Workbook workbook = excel.Workbook();
workbook.worksheets[0].name = "1";
for (var i = 0; i < viewModel.pagedRows.length; i++) {
final page = viewModel.pagedRows[i];
final excel.Worksheet worksheet = i == 0 ? workbook.worksheets[0] : workbook.worksheets.addWithName((i + 1).toString());
converter.page = i;
key.currentState!.exportToExcelWorksheet(excludeColumns: ['id'], worksheet, rows: page, converter: converter,
cellExport: (details) async {
details.excelRange.cellStyle.hAlign = excel.HAlignType.center;
});
}
final List<int> bytes = workbook.saveAsStream();
workbook.dispose();
writeToFile('excel.xlsx', bytes);
И мойCustomDataGridToExcelConverter
класс как ниже
class CustomDataGridToExcelConverter extends DataGridToExcelConverter {
int page = 0;
@override
void exportToExcelWorksheet(SfDataGrid dataGrid, List<DataGridRow>? rows, Worksheet worksheet) {
(dataGrid.source as LogbookViewModel).silentHandlePageChange(page == 0 ? 0 : page - 1, page);
super.exportToExcelWorksheet(dataGrid, rows, worksheet);
}
silentHandlePageChange
метод является альтернативойhandlePageChange
который не уведомляет слушателей.
void silentHandlePageChange(int oldPageIndex, int newPageIndex) async {
_dataGridRows = _pagedRows[newPageIndex];
_currentPage = newPageIndex;
}
На мой взгляд, постраничный экспорт в excel должен быть в коробке, но мне как-то удалось это сделать