Flutter Google Sheets操作插件gsheets的使用
Flutter Google Sheets操作插件gsheets的使用
gsheets
是一个用于与Google Sheets API v4交互的Dart库。它允许开发者在Flutter应用中轻松管理电子表格。下面是如何使用该插件的基本指南和完整示例代码。
使用方法 🔧
准备工作
首先,你需要获取Google Sheets API的凭证。如果你不知道如何获取这些凭证,可以参考这篇文章:How To Get Credentials for Google Sheets。
示例代码
以下是一个完整的示例,展示了如何使用gsheets
包来操作Google Sheets。
import 'package:gsheets/gsheets.dart';
/// Your google auth credentials
const _credentials = r'''
{
"type": "service_account",
"project_id": "your-project-id",
"private_key_id": "your-private-key-id",
"private_key": "your-private-key",
"client_email": "your-client-email",
"client_id": "your-client-id",
"auth_uri": "https://accounts.google.com/o/oauth2/auth",
"token_uri": "https://oauth2.googleapis.com/token",
"auth_provider_x509_cert_url": "https://www.googleapis.com/oauth2/v1/certs",
"client_x509_cert_url": "your-cert-url"
}
''';
/// Your spreadsheet id
const _spreadsheetId = 'your-spreadsheet-id';
void main() async {
// 初始化 GSheets
final gsheets = GSheets(_credentials);
// 获取指定ID的电子表格
final ss = await gsheets.spreadsheet(_spreadsheetId);
print(ss.data.namedRanges.byName.values
.map((e) => {
'name': e.name,
'start':
'${String.fromCharCode((e.range?.startColumnIndex ?? 0) + 97)}${(e.range?.startRowIndex ?? 0) + 1}',
'end':
'${String.fromCharCode((e.range?.endColumnIndex ?? 0) + 97)}${(e.range?.endRowIndex ?? 0) + 1}'
})
.join('\n'));
// 获取名为'example'的工作表
var sheet = ss.worksheetByTitle('example');
// 如果不存在则创建工作表
sheet ??= await ss.addWorksheet('example');
// 更新'B2'单元格值为'new'
await sheet.values.insertValue('new', column: 2, row: 2);
print(await sheet.values.value(column: 2, row: 2)); // 输出: new
// 获取并打印'B2'单元格对象
final cell = await sheet.cells.cell(column: 2, row: 2);
print(cell.value); // 输出: new
// 更新'B2'单元格值为'new2'
await cell.post('new2');
print(cell.value); // 输出: new2
print(await sheet.values.value(column: 2, row: 2)); // 输出: new2
// 插入一行数据到第一行
final firstRow = ['index', 'letter', 'number', 'label'];
await sheet.values.insertRow(1, firstRow);
print(await sheet.values.row(1)); // 输出: [index, letter, number, label]
// 在'A'列插入一系列数据,从第二行开始
final firstColumn = ['0', '1', '2', '3', '4'];
await sheet.values.insertColumn(1, firstColumn, fromRow: 2);
print(await sheet.values.column(1, fromRow: 2)); // 输出: [0, 1, 2, 3, 4]
// 按键名插入数据到'letter'列
final secondColumn = ['a', 'b', 'c', 'd', 'e'];
await sheet.values.insertColumnByKey('letter', secondColumn);
print(await sheet.values.columnByKey('letter')); // 输出: [a, b, c, d, e]
// 将映射数据插入'C'列,并将其键映射到'A'列
final thirdColumn = {'0': '1', '1': '2', '2': '3', '3': '4', '4': '5'};
await sheet.values.map.insertColumn(3, thirdColumn, mapTo: 1);
print(await sheet.values.map.column(3)); // 输出: {0: 1, 1: 2, 2: 3, 3: 4, 4: 5}
// 将映射数据插入'label'列,并将其键映射到'letter'列
final fourthColumn = {'a': 'a1', 'b': 'b2', 'c': 'c3', 'd': 'd4', 'e': 'e5'};
await sheet.values.map.insertColumnByKey('label', fourthColumn, mapTo: 'letter');
print(await sheet.values.map.columnByKey('label', mapTo: 'letter')); // 输出: {a: a1, b: b2, c: c3, d: d4, e: e5}
// 将映射数据作为新行追加到底部,并将键映射到第一行
final secondRow = {'index': '5', 'letter': 'f', 'number': '6', 'label': 'f6'};
await sheet.values.map.appendRow(secondRow);
print(await sheet.values.map.lastRow()); // 输出: {index: 5, letter: f, number: 6, label: f6}
// 获取第一行的所有单元格对象,并更新每个单元格的值
final cellsRow = await sheet.cells.row(1);
cellsRow.forEach((cell) => cell.value = '_${cell.value}');
await sheet.cells.insert(cellsRow);
print(await sheet.values.row(1)); // 输出: [_index, _letter, _number, _label]
}
这个示例展示了如何初始化gsheets
,获取或创建工作表,以及如何进行各种数据插入和读取操作。请确保替换示例中的_credentials
和_spreadsheetId
为你自己的凭证和电子表格ID。
更多关于Flutter Google Sheets操作插件gsheets的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
更多关于Flutter Google Sheets操作插件gsheets的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
在Flutter中操作Google Sheets,你可以使用gsheets
插件。这个插件允许你读取和写入Google Sheets中的数据。以下是一个基本的示例,展示了如何使用gsheets
插件来读取和写入Google Sheets。
首先,确保你已经在你的pubspec.yaml
文件中添加了gsheets
依赖:
dependencies:
flutter:
sdk: flutter
gsheets: ^latest_version # 请替换为最新的版本号
然后,运行flutter pub get
来安装依赖。
接下来,你需要设置Google Sheets API的凭据。这通常涉及创建一个OAuth 2.0客户端ID,并下载凭据文件(通常是JSON格式)。确保你的Google Sheets是公开的,或者你已经为API设置了正确的访问权限。
以下是一个简单的Flutter应用示例,展示如何使用gsheets
插件:
import 'package:flutter/material.dart';
import 'package:gsheets/gsheets.dart';
import 'dart:convert';
import 'dart:async';
void main() {
runApp(MyApp());
}
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
title: 'Flutter Google Sheets Example',
home: Scaffold(
appBar: AppBar(
title: Text('Flutter Google Sheets Example'),
),
body: Center(
child: MyHomePage(),
),
),
);
}
}
class MyHomePage extends StatefulWidget {
@override
_MyHomePageState createState() => _MyHomePageState();
}
class _MyHomePageState extends State<MyHomePage> {
final String credentialsPath = 'path/to/your/credentials.json'; // 替换为你的凭据文件路径
final String sheetId = 'your-sheet-id'; // 替换为你的Google Sheets ID
GSheets? _gsheets;
@override
void initState() {
super.initState();
_initializeGSheets();
}
Future<void> _initializeGSheets() async {
// 读取凭据文件
final File credentialsFile = File(credentialsPath);
final String credentialsJson = await credentialsFile.readAsString();
final Map<String, dynamic> credentialsData = jsonDecode(credentialsJson);
// 初始化GSheets客户端
_gsheets = GSheets(
credentials: credentialsData,
scopes: ['https://www.googleapis.com/auth/spreadsheets.readonly'], // 根据需要调整权限
);
// 测试读取数据
_readDataFromSheet();
}
Future<void> _readDataFromSheet() async {
if (_gsheets != null) {
try {
final Sheet sheet = await _gsheets!.openById(sheetId)!;
final List<List<dynamic>> data = await sheet.getRange('A1:C10')!.getValues();
print('Sheet data: $data');
// 这里你可以更新UI,比如使用ListView显示数据
} catch (e) {
print('Error reading data: $e');
}
}
}
@override
Widget build(BuildContext context) {
return Column(
mainAxisAlignment: MainAxisAlignment.center,
children: <Widget>[
Text('Reading data from Google Sheets...'),
// 可以添加更多UI元素来显示数据或允许用户交互
],
);
}
}
注意:
- 凭据文件:你需要将
credentialsPath
替换为你的Google API凭据文件的实际路径。 - Google Sheets ID:你需要将
sheetId
替换为你想要操作的Google Sheets的实际ID。 - 权限:根据你的需求调整
scopes
。如果你需要写入数据,可能需要https://www.googleapis.com/auth/spreadsheets
权限。 - 错误处理:上面的代码只包含了基本的错误打印。在实际应用中,你可能需要更完善的错误处理和用户反馈机制。
- UI更新:上面的代码没有更新UI来显示从Google Sheets读取的数据。在实际应用中,你可能需要使用
setState
或其他状态管理方法来更新UI。
此外,由于gsheets
插件可能涉及到OAuth 2.0认证流程,这通常需要在桌面或移动设备上打开浏览器窗口来完成认证。因此,在实际部署时,请确保你的应用能够处理这种认证流程。
最后,请务必遵循Google Sheets API的使用条款和限制,以避免滥用或违反服务条款。