Excel按列读取数据



是否可以按列使用Excel依赖项来获取文件.xlsx中现有的数据?

我的意思是,对于工作表中存在的每一列,它都应该存储在一个列表中。

我只发现了如何使用按行提取数据

for (var table in excel.tables.keys) {
for (var row in excel.tables[table].rows) {
// code
}
}

有什么方法可以通过列来做到这一点吗?

谢谢。

我认为示例中的代码是您需要的:

/// Iterating and changing values to desired type
for (int row = 0; row < sheet.maxRows; row++) {
sheet.row(row).forEach((cell) {
var val = cell.value; //  Value stored in the particular cell
});
}

找到了一个临时解决方案,缺点是你需要获取列标题来获取它们的值,如果它能帮助你的话,下面是代码:

Future<List<ExcelSheetData>> getExcelFile(BuildContext context, String name, String email) async {
FilePickerResult pickedFile = await FilePicker.platform.pickFiles(
type: FileType.custom,
allowedExtensions: ['xlsx'],
allowMultiple: false,
);
List<ExcelSheetData> excelList = [];
int nameIndex;
int emailIndex;
if (pickedFile != null) {
setAddMembersLoadingTrue();
var file = pickedFile.paths.single;
var bytes = await File(file).readAsBytes();
Excel excel = await compute(parseExcelFile, bytes);
for (var table in excel.tables.keys) {
for (var row in excel.tables[table].rows) {
// name variable is for Name of Column Heading for Name
if (row?.any((element) => element?.value?.toString() == name) ?? false) {
Data data = row?.firstWhere((element) => element?.value?.toString()?.toLowerCase() == name);
nameIndex = data.colIndex;
}
// email variable is for Name of Column Heading for Email
if (row?.any((element) => element?.value?.toString() == email) ?? false) {
Data data = row?.firstWhere((element) => element?.value?.toString()?.toLowerCase() == email);
emailIndex = data.colIndex;
}
if (nameIndex != null && emailIndex != null) {
if (row[nameIndex]?.value.toString().toLowerCase() != name.toLowerCase() && row[emailIndex]?.value.toString().toLowerCase() != email.toLowerCase())
excelList.add(
ExcelSheetData(
name: row[nameIndex]?.value.toString(),
email: row[emailIndex]?.value.toString(),
),
);
}
}
}
setAddMembersLoadingFalse();
return excelList;
}
return null;
}

如果你需要更多的澄清,请参考这个问题

最新更新