Flutter Google Sheets操作插件gsheets的使用

发布于 1周前 作者 zlyuanteng 来自 Flutter

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

1 回复

更多关于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元素来显示数据或允许用户交互
      ],
    );
  }
}

注意

  1. 凭据文件:你需要将credentialsPath替换为你的Google API凭据文件的实际路径。
  2. Google Sheets ID:你需要将sheetId替换为你想要操作的Google Sheets的实际ID。
  3. 权限:根据你的需求调整scopes。如果你需要写入数据,可能需要https://www.googleapis.com/auth/spreadsheets权限。
  4. 错误处理:上面的代码只包含了基本的错误打印。在实际应用中,你可能需要更完善的错误处理和用户反馈机制。
  5. UI更新:上面的代码没有更新UI来显示从Google Sheets读取的数据。在实际应用中,你可能需要使用setState或其他状态管理方法来更新UI。

此外,由于gsheets插件可能涉及到OAuth 2.0认证流程,这通常需要在桌面或移动设备上打开浏览器窗口来完成认证。因此,在实际部署时,请确保你的应用能够处理这种认证流程。

最后,请务必遵循Google Sheets API的使用条款和限制,以避免滥用或违反服务条款。

回到顶部