资产文件夹中的Flutter Excel工作表

时间:2019-04-30 12:33:09

标签: dart flutter

我正在创建一个应用程序,在该应用程序中我将发送带有附加的excel表的电子邮件。
我已经有了excel工作表,我的应用程序将在发送数据之前将一些数据添加到excel工作表中。

但是,尝试将excel工作表添加到我的资产文件夹后,将pubspec.yaml的路径添加到File类找不到该文件。

File structure

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文件?

2 个答案:

答案 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);