Flutter 读取Excel表格

本篇博客,记录一下我用flutter开发Windows桌面软件的时候,读取Excel表格遇到的问题

在百度搜多有两个三方库可以读取表格,excel和spreadsheet_decoder,先开始使用的是excel这个三方库,这个垃圾,很多问题,后来使用了spreadsheet_decoder,才搞定。

我的表格数据量很大,一般都是几万条,我使用的一个4万多条数据的表格进行测试开发

excel存在的问题:

1、数据量大,读取很慢,因为要遍历读取每一行的数据,超级慢。

2、数据量大,读到8000多条的时候,数据乱了,你敢信,两行的数据,读取成一行给我了。

3、读取到的数据不正规,以下是示例,数据带有文字样式,导致不好解析,反正我按照示例代码读取的。

[

Data(蔺文辉, 0, 8378, CellStyle(false, 0, false, Underline.None, 10, 宋体, TextWrapping.WrapText, VerticalAlign.Bottom, HorizontalAlign.Left, FF000000, none, Border(borderStyle: BorderStyle.Thin, borderColorHex: null), Border(borderStyle: BorderStyle.Thin, borderColorHex: null), Border(borderStyle: BorderStyle.Thin, borderColorHex: null), Border(borderStyle: BorderStyle.Thin, borderColorHex: null), Border(borderStyle: null, borderColorHex: null), false, false), Sheet1), 

Data(181352xxx95, 1, 8378, CellStyle(false, 0, false, Underline.None, 10, 宋体, TextWrapping.WrapText, VerticalAlign.Bottom, HorizontalAlign.Left, FF000000, none, Border(borderStyle: BorderStyle.Thin, borderColorHex: null), Border(borderStyle: BorderStyle.Thin, borderColorHex: null), Border(borderStyle: BorderStyle.Thin, borderColorHex: null), Border(borderStyle: BorderStyle.Thin, borderColorHex: null), Border(borderStyle: null, borderColorHex: null), false, false), Sheet1),

 Data(山西太工天成控制工程有限公司, 2, 8378, CellStyle(false, 0, false, Underline.None, 10, 宋体, TextWrapping.WrapText, VerticalAlign.Bottom, HorizontalAlign.Left, FF000000, none, Border(borderStyle: BorderStyle.Thin, borderColorHex: null), Border(borderStyle: BorderStyle.Thin, borderColorHex: null), Border(borderStyle: BorderStyle.Thin, borderColorHex: null), Border(borderStyle: BorderStyle.Thin, borderColorHex: null), Border(borderStyle: null, borderColorHex: null), false, false), Sheet1),

 Data(-, 3, 8378, CellStyle(false, 0, false, Underline.None, 10, 宋体, TextWrapping.WrapText, VerticalAlign.Bottom, HorizontalAlign.Left, FF000000, none, Border(borderStyle: BorderStyle.Thin, borderColorHex: null), Border(borderStyle: BorderStyle.Thin, borderColorHex: null), Border(borderStyle: BorderStyle.Thin, borderColorHex: null), Border(borderStyle: BorderStyle.Thin, borderColorHex: null), Border(borderStyle: null, borderColorHex: null), false, false), Sheet1)

]

4、垃圾玩意。

spreadsheet_decoder 完全不存在上面的问题

示例代码:

    var bytes = File(xlsFilePath).readAsBytesSync();
    var excel = SpreadsheetDecoder.decodeBytes(bytes);

    for (var tableIndex in excel.tables.keys) {
      //遍历多个sheet
      var phoneIndex = -1;
      var table = excel.tables[tableIndex]; //每一张表

      ///拿到电话是第几列
      if (table!.maxRows > 0) {
        var row = table.rows[0]; //0行的数据
        for (var j = 0; j < row.length; j++) {
          var str = row[j];
          if (str == "电话") {
            phoneIndex = j;
            break;
          }
        }

        if (phoneIndex != -1) {
          for (var i = 1; i < table.rows.length; i++) {
            //遍历每一个表格内数据
            /// row 每一行的数据,是一个字符串数组,包含每一列的数据
            var row = table.rows[i]; //表里的每一行数据
            // print("$row");
            ///遍历每一行的数据,拿到每一行的电话
            var str = row[phoneIndex];
            print(str);
            phoneList.add(str);
          }
        }
      }
    }

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值