【问题标题】:how to convert excel sheet into json in flutter如何在颤振中将excel表格转换为json
【发布时间】:2021-04-23 03:27:11
【问题描述】:

如何在flutter中将excel表格转换为json。

我有一张学生姓名和班级的 Excel 表格,我想将其转换为 json,以便于运行应用程序或以其他方式将日期上传到 Firestore。

Future<String> excelToJson() async {
var file = await FilePicker.getFilePath(
    type: FileType.custom, allowedExtensions: ['xlsx', 'csv', 'xls']);
var bytes = File(file).readAsBytesSync();
var excel = Excel.decodeBytes(bytes);
int i = 0;
List<dynamic> keys = new List<dynamic>();
List<Map<String, dynamic>> json = new List<Map<String, dynamic>>();
for (var table in excel.tables.keys) {
  for (var row in excel.tables[table].rows) {
    if (i == 0) {
      keys = row;
      i++;
    } else {
      Map<String, dynamic> temp = Map<String, dynamic>();
      int j = 0;
      String tk = '';
      for (var key in keys) {
        tk = "\u201C" + key + "\u201D";
        temp[tk] = (row[j].runtimeType==String)?"\u201C" + row[j].toString() + "\u201D":row[j];
        j++;
      }
      json.add(temp);
    }
  }
}
print(json.length);
String fullJson = json.toString().substring(1, json.toString().length - 1);
return fullJson;}

我想学习如何在我的应用程序中使用这个脚本,或者其他更简单的方法

谢谢

【问题讨论】:

    标签: flutter dart flutter-layout flutter-dependencies flutter-web


    【解决方案1】:

    使用这个方法:

    Future<void> excelToJson(String fileName, String fileDirectory,GlobalKey<ScaffoldState> scaffoldKey) async {
      ByteData data = await rootBundle.load(fileDirectory);
      var bytes = data.buffer.asUint8List(data.offsetInBytes, data.lengthInBytes);
      var excel = Excel.decodeBytes(bytes);
      int i = 0;
      List<dynamic> keys = new List<dynamic>();
      List<Map<String, dynamic>> json = new List<Map<String, dynamic>>();
      for (var table in excel.tables.keys) {
        for (var row in excel.tables[table].rows) {
          if (i == 0) {
            keys = row;
            i++;
          } else {
            Map<String, dynamic> temp = Map<String, dynamic>();
            int j = 0;
            String tk = '';
            for (var key in keys) {
              tk = '"' + key + '"';
              temp[tk] = (row[j].runtimeType == String)
                  ? '"' + row[j].toString() + '"'
                  : row[j];
              j++;
            }
            json.add(temp);
          }
        }
      }
      print(json.length);
      String fullJson = json.toString().substring(1, json
          .toString()
          .length - 1);
    
      fullJson = '{ "DATA" : [$fullJson]}';
      final directory = await getExternalStorageDirectory();
    
      File file = await File('${directory.path}/$fileName.json').create();
      await file.writeAsString(fullJson).then((value) =>
          scaffoldKey.currentState
              .showSnackBar(SnackBar(content: Text("Completed")))
      );
      print(file.exists().toString());
    }
    
    Future<void> jsonToExcel(String fileName, String fileDirectory,GlobalKey<ScaffoldState> scaffoldKey) async{
      String jsonString = await rootBundle.loadString(fileDirectory);
    
      List<dynamic> jsonResult = jsonDecode(jsonString)["DATA"];
    
    
      var excel = Excel.createExcel();
      Sheet sheetObject = excel['Sheet1'];
    
      Map<String,dynamic> result = jsonResult[0];
      sheetObject.appendRow(result.keys.toList());
    
      for(int i =0;i<jsonResult.length;i++){
        Map<String,dynamic> result = jsonResult[i];
        sheetObject.appendRow(result.values.toList());
      }
      final directory = await getExternalStorageDirectory();
    
      excel.encode().then((onValue) {
        File(("${directory.path}/$fileName.xlsx"))
          ..createSync(recursive: true)
          ..writeAsBytesSync(onValue);
        scaffoldKey.currentState
            .showSnackBar(SnackBar(content: Text("Completed")));
      });
    
    
      print(sheetObject);
    }
    

    【讨论】:

    • hii 我想知道如何使用这个包更改单元格格式或预定义单元格格式。
    • 嗨,如果你想以单元格格式进行任何编辑,你可以使用这个库syncfusion_flutter_xlsio
    • 实际上我尝试了那个包,但问题是当我的数据列表输入时,它会将整个数据放入 1 个单元格中,然后通过你的方法并将我的数据集正确打包到 excel 表中
    【解决方案2】:

    稍微更新了你的代码....

     Future<String> excelToJson() async {
            FilePickerResult result =await FilePicker.platform.pickFiles(type:FileType.custom,allowedExtensions: ['xls','xlsx','csv']);
           if (result != null) {
            File excelFile = File(result.files.single.path);}
            var bytes = File(excelFilePath).readAsBytesSync();
            var excel = Excel.decodeBytes(bytes);
            int i = 0;
            List<dynamic> keys = [];
            var jsonMap = [];
        
            for (var table in excel.tables.keys) {
              dev.log(table.toString());
              for (var row in excel.tables[table].rows) {
                dev.log(row.toString());
                if (i == 0) {
                  keys = row;
                  i++;
                } else {
                  var temp = {};
                  int j = 0;
                  String tk = '';
                  for (var key in keys) {
                    tk = '\"${key.toString()}\"';
                    temp[tk] = (row[j].runtimeType == String)
                        ?  '\"${row[j].toString()}\"'
                        : row[j];
                    j++;
                  }
        
                  jsonMap.add(temp);
                }
              }
            }
            dev.log(
              jsonMap.length.toString(),
              name: 'excel to json',
            );
            dev.log(jsonMap.toString(), name: 'excel to json');
            String fullJson =
                jsonMap.toString().substring(1, jsonMap.toString().length - 1);
            dev.log(
              fullJson.toString(),
              name: 'excel to json',
            );
            return fullJson;
          }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-12-12
      • 2021-11-08
      • 2019-08-09
      • 2021-10-26
      • 2019-08-13
      • 2018-10-16
      • 2020-04-28
      • 2020-12-10
      相关资源
      最近更新 更多