如何在Dart中编写函数将XLSX文件转换为List<MyData>格式?
实现XLSX文件解析为List
1. 添加XLSX处理依赖
在pubspec.yaml中添加常用的XLSX处理包:
dependencies: excel: ^2.0.0 # 建议使用最新版本
2. 编写解析函数
创建异步函数读取选中的XLSX文件,将内容转换为List<MyData>:
Future<List<MyData>> parseXlsxFile(File file) async { final List<MyData> dataList = []; try { // 读取文件字节流 final bytes = await file.readAsBytes(); final excel = Excel.decodeBytes(bytes); // 获取第一个工作表(可根据实际需求指定工作表名称或索引) final sheet = excel.tables.values.first; // 遍历数据行(跳过表头,假设第一行为表头) for (int i = 1; i < sheet.maxRows; i++) { final row = sheet.rows[i]; if (row == null || row.length < 2) continue; // 跳过空行或数据不全的行 // 解析time和value字段 final timeStr = row[0]?.toString().trim(); final valueStr = row[1]?.toString().trim(); if (timeStr == null || valueStr == null) continue; final time = double.tryParse(timeStr); final value = double.tryParse(valueStr); if (time != null && value != null) { dataList.add(MyData(time, value)); } } } catch (e) { print('解析XLSX文件出错: $e'); } return dataList; }
3. 关联文件选择与解析逻辑
修改selectFile函数,选中文件后调用解析函数获取数据列表:
Future selectFile() async { final result = await FilePicker.platform.pickFiles(allowMultiple: false); if (result == null) return; final path = result.files.single.path!; final selectedFile = File(path); setState(() => file = selectedFile); // 执行解析并获取数据 final myDataList = await parseXlsxFile(selectedFile); // 此处可对myDataList做后续操作,比如更新状态、渲染数据等 print('解析完成,共获取${myDataList.length}条数据'); }
注意事项
- 确保XLSX中对应列的数据可以转换为
double,若存在特殊格式(如带单位),需提前处理字符串。 - 数千行数据的场景下,
excel库可稳定应对,若遇性能问题可考虑分批读取或更换更高效的解析库。 - 需处理文件损坏、格式错误等异常情况,避免程序崩溃。
内容的提问来源于stack exchange,提问作者Can Küçükyılmaz
相关产品推荐
相关产品推荐

