我正在创建一个应用程序,在该应用程序中我将发送带有附加的excel表的电子邮件。
我已经有了excel工作表,我的应用程序将在发送数据之前将一些数据添加到excel工作表中。
但是,尝试将excel工作表添加到我的资产文件夹后,将pubspec.yaml的路径添加到File类找不到该文件。
pubspec.yaml:
assets:
- logo.png
- Declaratieformulier.xlsx
功能:
openFile() {
var bytes = new File("assets/Declaratieformulier.xlsx").readAsBytesSync();
var decoder = new SpreadsheetDecoder.decodeBytes(bytes);
var table = decoder.tables['Blad1'];
我做了一些挖掘,发现资产没有作为文件放在设备上,而是包含在APK中。
所以我的问题是:如何在我的应用程序中包含一个Excel工作表,以便我可以阅读它并将其另存为手机中的新Excel文件?
答案 0 :(得分:1)
您需要使用Flutter rootBundle读取文件。 正如@LorenzOliveto所说,您还需要修复pubspec.yaml声明。
ByteData data = await rootBundle.load("assets/Declaratieformulier.xlsx");
// This would be your equivalent bytes variable
List<int> bytes = data.buffer.asUint8List(data.offsetInBytes, data.lengthInBytes);
// You can also copy it to the device when the app starts
final directory = await getApplicationDocumentsDirectory();
String filePath = join(directory, "Declaratieformulier.xlsx");
await File(filePath).writeAsBytes(bytes);
答案 1 :(得分:1)
您必须在pubspec.yaml
中插入完整路径,因此必须添加Declaratieformulier.xlsx
而不是assets/Declaratieformulier.xlsx
。
assets:
- logo.png
- assets/Declaratieformulier.xlsx
此外,您还应该阅读根包的文件
import 'package:flutter/services.dart' show ByteData, rootBundle;
...
ByteData data = await rootBundle.load("assets/Declaratieformulier.xlsx");
List<int> bytes = data.buffer.asUint8List(data.offsetInBytes, data.lengthInBytes);
var decoder = SpreadsheetDecoder.decodeBytes(bytes);