flutter - 如何在颤振中将excel表格转换为json
问题描述
如何在颤振中将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;}
我想学习如何在我的应用程序中使用这个脚本,或者其他更简单的方法
谢谢
解决方案
稍微更新了您的代码....
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;
}
推荐阅读
- android - 在复选框状态更改时从回收器视图适配器更新 sqlite 数据库
- python - 如何解决文件中的示例
- java - 使用来自两个不同数据库的两个同名表(Spring Boot)
- mapbox - 允许用户绘制自己的路线
- reactjs - React:从服务器加载内容并渲染到 React
- python - CPU的Python多处理上下文切换
- react-native - 反应原生 Redux-DevTools-Extension 不起作用
- r - 如何修改选定行的n后续值
- c# - 使用 DataContractSerializer 将具有交叉引用的对象反序列化到两个列表中
- haskell - haskell中元素的总和乘以3