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

通过Google Forms API创建的表单无法查看及获取回复求助

问题解决:Google Forms API创建的表单不可见及回复获取问题

问题1:表单在个人谷歌账号/云端硬盘中不可见

原因

通过服务账号调用Forms API创建的表单,默认归属该服务账号的独立云端硬盘,而非你的个人谷歌账号。服务账号是独立的身份实体,与个人账号的资源完全隔离,因此你无法在个人账号的表单页面或云端硬盘中找到它。

解决方法

  1. 将表单共享至个人账号
    调用Forms API的batchUpdate方法,添加个人账号邮箱为表单的查看/编辑者:

    batch_update_body = {
        "requests": [
            {
                "addEditor": {
                    "emailAddress": "你的个人邮箱@example.com"
                }
            }
        ]
    }
    form_service.forms().batchUpdate(formId=FORM_ID, body=batch_update_body).execute()
    

    执行后,你可在个人账号的「与我共享」文件夹中找到该表单。

  2. 创建时指定个人云端硬盘的父文件夹
    先在个人云端硬盘创建一个文件夹,将该文件夹共享给服务账号(服务账号邮箱可在credentials.json的client_email字段中找到)并赋予「编辑」权限。创建表单时指定该文件夹ID:

    create_form_body = {
        "info": {
            "title": "你的表单标题"
        },
        "parentFolderId": "个人云端硬盘文件夹ID"
    }
    form = form_service.forms().create(body=create_form_body).execute()
    

问题2:获取表单回复及关联Google表格

步骤1:关联表单到Google表格

有两种关联方式可选:

  1. 手动关联(快速测试用)
    通过responderUri打开表单,点击右上角「回应」标签页,选择「链接到表格」,可创建新表格或关联已有表格,后续回复会自动同步至表格。

  2. API方式关联
    调用Forms API的batchUpdate方法设置回复目标为指定表格:

    batch_update_body = {
        "requests": [
            {
                "setDestination": {
                    "destination": {
                        "type": "SPREADSHEET",
                        "id": "目标表格ID"
                    }
                }
            }
        ]
    }
    form_service.forms().batchUpdate(formId=FORM_ID, body=batch_update_body).execute()
    

    注意:需确保服务账号对该表格拥有编辑权限。

步骤2:修复回复获取代码的问题

你的代码失效可能源于以下问题,对应修复方案如下:

  • 权限不足:将服务账号添加为关联表格的查看/编辑者;
  • 表格未正确关联:确认表格已与表单绑定,且存在回复数据;
  • 范围设置过窄:扩大数据读取范围,避免遗漏列。

优化后的代码示例:

from googleapiclient.discovery import build
from google.oauth2 import service_account
import pandas as pd

SCOPES = ["https://www.googleapis.com/auth/spreadsheets.readonly"]
SERVICE_ACCOUNT_FILE = 'C:/python/nfl_poll_py/credentials.json'
SPREADSHEET_ID = '实际表格ID'
RANGE_NAME = 'Sheet1!A:ZZ'  # 扩大范围避免遗漏数据

credentials = service_account.Credentials.from_service_account_file(
    SERVICE_ACCOUNT_FILE, scopes=SCOPES)

sheets_service = build('sheets', 'v4', credentials=credentials)

try:
    result = sheets_service.spreadsheets().values().get(
        spreadsheetId=SPREADSHEET_ID, range=RANGE_NAME).execute()
    values = result.get('values', [])

    if not values:
        print('无数据返回,请确认表格已关联表单且有回复')
    else:
        df_responses = pd.DataFrame(values[1:], columns=values[0])
        print(df_responses)
except Exception as e:
    print(f"获取回复时出错: {e}")

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.18 12:06:04