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"); } }
关键步骤说明
授权流程修正:
- 把原有的
prompt逻辑改成异步函数,通过stdin.readLineSync()读取用户输入的授权码 - 授权后Google会在页面显示一串授权码,复制它粘贴到终端即可完成认证
- 把原有的
创建表格:
- 通过
sheetsApi.spreadsheets.create()方法创建表格,传入Spreadsheet对象设置表格标题 - 创建成功后会返回表格的ID,我们用这个ID进行后续操作
- 通过
写入单元格:
- 使用
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
相关产品推荐
相关产品推荐

