You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Dart/Flutter调用Google Sheets API创建表格并写入A1求助

解决Dart/Flutter中创建Google Sheets并写入单元格的问题

我完全理解你现在的困扰——刚接触Google APIs,折腾了两天还没搞定,简化需求后还是卡在上授权后的步骤上。别着急,我给你一个完整的可运行方案,一步到位解决创建表格和写入A1的问题:

首先,你的核心问题在于授权流程没有完整闭环:clientViaUserConsent需要用户提供授权码才能完成认证,但你的原代码只打印了授权URL,没处理用户输入的授权码。我们先修正这部分,再加上创建表格和写入的逻辑。

完整可运行代码

import 'package:googleapis/sheets/v4.dart';
import 'package:googleapis_auth/auth_io.dart' as auth;
import 'dart:io';

void main() async {
  // 替换成你的OAuth 2.0 Client ID
  const clientId = auth.ClientId(
    "YOUR_CLIENT_ID.apps.googleusercontent.com",
    "YOUR_CLIENT_SECRET",
  );
  
  // 所需权限范围(创建和修改表格)
  const scopes = [SheetsApi.spreadsheetsScope];

  try {
    // 完成授权流程
    final authClient = await auth.clientViaUserConsent(
      clientId,
      scopes,
      (url) async {
        print("请访问以下URL授权:");
        print(" => $url");
        print("\n授权后复制页面上的「授权码」,粘贴到下方并回车:");
        return stdin.readLineSync()!.trim();
      },
    );

    // 初始化Sheets API客户端
    final sheetsApi = SheetsApi(authClient);

    // 1. 创建新的Google Sheets表格
    final newSpreadsheet = Spreadsheet()
      ..properties = SpreadsheetProperties()
      ..properties!.title = "我的Dart测试表格";
    
    final createdSheet = await sheetsApi.spreadsheets.create(newSpreadsheet);
    final sheetId = createdSheet.spreadsheetId!;
    print("✅ 表格创建成功!表格ID:$sheetId");
    print("表格链接:https://docs.google.com/spreadsheets/d/$sheetId");

    // 2. 向A1单元格写入值
    final valueRange = ValueRange()..values = [["Hello from Dart!"]];
    await sheetsApi.spreadsheets.values.update(
      valueRange,
      sheetId,
      "A1",
      valueInputOption: "RAW",
    );
    print("✅ 已成功向A1单元格写入内容!");

    // 关闭授权客户端
    authClient.close();
  } catch (e) {
    print("❌ 出错了:$e");
  }
}

关键步骤说明

  1. 授权流程修正:

    • 把原有的prompt逻辑改成异步函数,通过stdin.readLineSync()读取用户输入的授权码
    • 授权后Google会在页面显示一串授权码,复制它粘贴到终端即可完成认证
  2. 创建表格:

    • 通过sheetsApi.spreadsheets.create()方法创建表格,传入Spreadsheet对象设置表格标题
    • 创建成功后会返回表格的ID,我们用这个ID进行后续操作
  3. 写入单元格:

    • 使用values.update()方法,指定表格ID、目标单元格范围(这里是"A1"),以及要写入的二维数组(因为Google Sheets的单元格是行列结构)
    • valueInputOption: "RAW"表示直接写入原始值,不需要解析公式

注意事项

  • 确保你的OAuth客户端ID是Desktop app类型(在Google开发者控制台创建时选择),命令行程序不能用Web或Android/iOS类型的客户端ID
  • 运行前确保已经在pubspec.yaml中添加了依赖:
    dependencies:
      googleapis: ^12.0.0
      googleapis_auth: ^1.4.1
    
  • 授权时如果遇到"应用未验证"的提示,点击"高级"->"继续访问"即可(这是测试阶段的正常提示,正式发布需要验证应用)

内容的提问来源于stack exchange,提问作者user2798722

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.06 20:52:45