Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Flutter: How to read data from simple spreadsheet?

I am new to flutter and a have question that shouldn't be to hard to answer for a pro.

I have a simple spreadsheet with 5 columns and 10 rows. Now I have two variables, representing column and row index.

I want to simply read the corresponding value out of the spreadsheet, depending on the wanted column and row numbers.

Is this possible with flutter? Can flutter read a spreadsheet (.csv e.g.) and somehow get the information out of it?

I'm looking forward to an answer, thank you!

EDIT: This is the code I have so far, originally from https://flutter.io/cookbook/persistence/reading-writing-files/.

It prints

I/flutter (18817): Instance of 'Future'

but I don't know how to access the data.

Future<String> readTable() async {
    try {
      final file = File("assets/res/table.txt");

      // Read the file
      String contents = await file.readAsString();
      print(contents);
      return contents;
    } catch (e) {
      // If we encounter an error, return empty string
      return "";
    }
  }
like image 874
tmaihoff Avatar asked Oct 25 '18 09:10

tmaihoff


People also ask

How do I read data from Google sheets in flutter?

In the Flutter Calendar, get the data from the Google sheet using the Google AppScript, and load that data to the Flutter Calendar Events. STEP 2: Then, add the required data in the Google spreadsheet. STEP 3: Now, open the Google AppScript for corresponding spreadsheet data, and add the doGet() method.


2 Answers

Thanks for your answers. I made it work using async and await as can be seen in the following. Important as well is to declare the asset file in your pubspec.yaml like

flutter:
  assets:
    - assets/res/Book1.csv

Then declare both functions and just call loadCSV() when you want to load the data.

import 'package:flutter/services.dart' show rootBundle;

Future<String> loadAsset(String path) async {
   return await rootBundle.loadString(path);
}

void loadCSV() {
  loadAsset('assets/res/Book1.csv').then((dynamic output) {
    csvRaw = output;
  });
}
like image 188
tmaihoff Avatar answered Oct 23 '22 04:10

tmaihoff


Tobi nailed the right answer, but to make that answer self-contained let me add here the need for:

import 'package:flutter/services.dart' show rootBundle;

to access rootBundle.

like image 37
Sam Avatar answered Oct 23 '22 05:10

Sam