Flutter Web使用excel包读取7工作表Excel文件遇日期范围错误
解决Flutter Web中excel包读取特定Excel文件的日期范围错误
在Flutter Web应用中使用excel包读取一个包含7个工作表的特定Excel文件时,抛出错误:
DateTime is outside valid range: 9989518819130000
读取其他Excel文件时,以下代码可正常运行,但读取该特定文件时无法加载数据:
void pickAndProcessFile() async { try { FilePickerResult? result = await FilePicker.platform.pickFiles(); if (result != null) { final List<int> bytes = result.files.single.bytes!; final excel = Excel.decodeBytes(bytes); var sheet1 = excel.tables.keys.elementAt(0); print(sheet1); } } catch (e, stackTrace) { print('Error decoding Excel file: $e'); print(stackTrace); } }
解决方法
- 排查文件中的异常日期值:错误核心是文件内存在超出
excel包支持范围的日期/时间数据。打开目标Excel文件,逐个工作表检查所有日期格式的单元格,确认是否存在极端日期(比如远超常规时间范围的数值)或被误设为日期格式的非日期内容。 - 修正异常单元格:找到问题单元格后,要么将其格式改为文本(如果内容并非真实日期),要么修改为合法的日期值。
- 替换解析包:若无法修改源文件,可尝试使用
excelize、spreadsheet_decoder等其他Flutter Excel解析包,部分包对异常日期的兼容性更强。 - 局部捕获日期异常:在解析流程中针对日期类型单元格单独捕获错误,避免整个文件解析失败。示例代码如下:
// 遍历单元格时处理日期异常 for (var table in excel.tables.values) { for (var row in table.rows) { for (var cell in row) { if (cell?.type == CellType.datetime) { try { var dateValue = cell?.value; // 正常处理日期逻辑 } catch (dateError) { print("单元格日期解析失败: $dateError"); // 跳过异常单元格或做标记处理 } } } } }
内容的提问来源于stack exchange,提问作者Suraj Maurya
相关产品推荐
相关产品推荐

