You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.20 05:30:18