[英]How do you use the flutter/dart package spreadsheet_decoder?
When I try to use the package 'spreadsheet_decoder' in my flutter app like so:当我尝试在我的 flutter 应用程序中使用 package 'spreadsheet_decoder' 时,如下所示:
var file = Uri.file('spreadsheets/Contact_list.xlsx');
var bytes = File.fromUri(file).readAsBytesSync();
var decoder = SpreadsheetDecoder.decodeBytes(bytes);
where I created a folder called spreadsheets inside the app and added it to the pubspec.我在应用程序中创建了一个名为电子表格的文件夹,并将其添加到 pubspec。 I got the following error:我收到以下错误:
[VERBOSE-2:ui_dart_state.cc(157)] Unhandled Exception: FileSystemException: Cannot open file, path = 'spreadsheets/Contact_list.xlsx' (OS Error: No such file or directory, errno = 2)
#0 _File.throwIfError (dart:io/file_impl.dart:645:7)
#1 _File.openSync (dart:io/file_impl.dart:489:5)
#2 _File.readAsBytesSync (dart:io/file_impl.dart:549:18)
#3 getData (package:cvr/extract_excel.dart:8:34)
#4 _TransferScreenState.transferPeopleFromExcelToFirebase (package:cvr/utilities/transfer_data.dart:35:5)
<asynchronous suspension>
#5 _TransferScreenState.build.<anonymous closure> (package:cvr/utilities/transfer_data.dart:52:11)
#6 _InkResponseState._handleTap (package:flutter/src/material/ink_well.dart:706:14)
#7 _InkResponseState.build.<anonymous closure> (package:flutter/src/material/ink_well.dart:789:36)
#8 GestureRecognizer.invokeCallback (package:flutter/src/gestures/recognizer.dart:182:24)
#9 TapGestureRecognizer.handleTapUp (package:flutter/src/gestures/tap.<…>
If I use the exact same code in a stand alone dart file and run it separately I do not get this error.如果我在独立的 dart 文件中使用完全相同的代码并单独运行它,我不会收到此错误。 Does anyone know where I can save the excel document and what path I should use to access it?有谁知道我可以在哪里保存 excel 文档以及我应该使用什么路径来访问它?
You can use https://pub.dev/packages/path_provider and get temp directory via getTemporaryDirectory()
您可以使用https://pub.dev/packages/path_provider并通过getTemporaryDirectory()
获取临时目录
You can copy paste run full code below您可以在下面复制粘贴运行完整代码
and need to put your file in /data/user/0/your_domain.your_project/cache/test.xlsx
并且需要将您的文件放在/data/user/0/your_domain.your_project/cache/test.xlsx
code snippet代码片段
Directory tempDir = await getTemporaryDirectory();
String tempPath = tempDir.path;
var file = '${tempDir.path}/test.xlsx';
print('file full path $file');
var bytes = File(file).readAsBytesSync();
var decoder = SpreadsheetDecoder.decodeBytes(bytes, update: true);
output of full code完整代码的输出
I/flutter ( 515): file full path /data/user/0/your_domain.your_proejct/cache/test.xlsx
I/flutter ( 515): wosksheet1
I/flutter ( 515): 1
I/flutter ( 515): 2
I/flutter ( 515): [test]
I/flutter ( 515): [123]
full code完整代码
import 'package:flutter/material.dart';
import 'dart:io';
import 'package:spreadsheet_decoder/spreadsheet_decoder.dart';
import 'package:path_provider/path_provider.dart';
void main() => runApp(MyApp());
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
title: 'Flutter Demo',
theme: ThemeData(
primarySwatch: Colors.blue,
),
home: MyHomePage(title: 'Flutter Demo Home Page'),
);
}
}
class MyHomePage extends StatefulWidget {
MyHomePage({Key key, this.title}) : super(key: key);
final String title;
@override
_MyHomePageState createState() => _MyHomePageState();
}
class _MyHomePageState extends State<MyHomePage> {
int _counter = 0;
void _incrementCounter() async {
Directory tempDir = await getTemporaryDirectory();
String tempPath = tempDir.path;
var file = '${tempDir.path}/test.xlsx';
print('file full path $file');
var bytes = File(file).readAsBytesSync();
var decoder = SpreadsheetDecoder.decodeBytes(bytes, update: true);
for (var table in decoder.tables.keys) {
print(table);
print(decoder.tables[table].maxCols);
print(decoder.tables[table].maxRows);
for (var row in decoder.tables[table].rows) {
print("$row");
}
setState(() {
_counter++;
});
}
}
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text(widget.title),
),
body: Center(
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: <Widget>[
Text(
'You have pushed the button this many times:',
),
Text(
'$_counter',
style: Theme.of(context).textTheme.display1,
),
],
),
),
floatingActionButton: FloatingActionButton(
onPressed: _incrementCounter,
tooltip: 'Increment',
child: Icon(Icons.add),
),
);
}
}
Try using the Uri.parse
or Uri.tryParse
mehod尝试使用Uri.parse
或Uri.tryParse
Example Code:示例代码:
var readbytes = File.fromUri(Uri.parse('path/THISisCOOL.xlsx')).readAsBytesSync();
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.