全网整合营销服务商

电脑端+手机端+微信端=数据同步管理

免费咨询热线:400-708-3566

使用Python在指定Google Drive文件夹中创建Google表单的教程

Google Forms API本身不提供在特定Google Drive文件夹中创建表单的功能。本教程将指导您如何结合使用Google Drive API和Google Forms API,首先利用Drive API在目标文件夹中创建表单的占位符文件,然后使用Forms API填充表单内容,从而实现在指定位置创建Google表单。

引言

在使用Python通过Google Forms API创建Google表单时,一个常见的限制是无法直接指定表单的存储位置。默认情况下,所有新创建的表单都会被放置在您的Google Drive根目录中。这对于需要将表单组织到特定项目或分类文件夹中的用户来说,带来了额外的手动管理负担。Google Forms API的文档中并未提供类似parents这样的参数来在创建时指定父文件夹。

解决方案核心:整合Google Drive API

要解决这一问题,我们需要理解Google表单在Google生态系统中的本质:它被视为Google Drive中的一种特殊文件类型(MIME类型为application/vnd.google-apps.form)。因此,我们可以利用Google Drive API的强大功能来管理这些“文件”的位置。

核心思路是:

  1. 利用Google Drive API在目标文件夹中创建一个指定MIME类型的空白表单文件。这样,表单的“壳”就直接创建在了我们想要的文件夹中,并获得了其唯一的表单ID。
  2. 利用Google Forms API,通过上一步获取到的表单ID,对这个空白表单进行内容填充和属性更新(例如设置标题、添加问题等)。

通过这种两步走的策略,我们既能利用Drive API的文件夹管理能力,又能利用Forms API的表单内容编辑能力。

前置准备:API客户端和服务认证

在开始编写代码之前,请确保您已完成以下准备工作:

  1. 安装必要的库

    pip install google-api-python-client google-auth-oauthlib google-auth-httplib2
  2. 启用Google API: 在Google Cloud Console中,为您的项目启用“Google Drive API”和“Google Forms API”。

  3. 设置认证凭据: 下载您的OAuth 2.0客户端凭据文件(通常命名为credentials.json),并将其放置在您的Python脚本同一目录下。 您需要配置正确的API作用域(Scopes)。对于本教程,以下作用域是推荐的:

    • https://www.googleapis.com/auth/drive.file:允许访问和管理应用程序创建或打开的文件。
    • https://www.googleapis.com/auth/forms.body:允许查看、编辑、创建和删除Google表单的内容。
    • https://www.googleapis.com/auth/forms.responses.readonly:如果您还需要读取表单响应,则需要此作用域。

    以下是认证代码的通用模板:

    import os
    from google.auth.transport.requests import Request
    from google.oauth2.credentials import Credentials
    from google_auth_oauthlib.flow import InstalledAppFlow
    from googleapiclient.discovery import build
    
    # 定义API作用域
    SCOPES = [
        "https://www.googleapis.com/auth/drive.file",
        "https://www.googleapis.com/auth/forms.body"
    ]
    
    creds = None
    # token.json 存储了用户上一次授权的凭据,如果存在,则直接加载
    if os.path.exists("token.json"):
        creds = Credentials.from_authorized_user_file("token.json", SCOPES)
    # 如果没有有效的凭据,则让用户登录
    if not creds or not creds.valid:
        if creds and creds.expired and creds.refresh_token:
            creds.refresh(Request())
        else:
            flow = InstalledAppFlow.from_client_secrets_file("credentials.json", SCOPES)
            creds = flow.run_local_server(port=0)
        # 将凭据保存到 token.json,以便下次使用
        with open("token.json", "w") as token:
            token.write(creds.to_json())
    
    # 构建Drive和Forms服务客户端
    drive_service = build("drive", "v3", credentials=creds)
    form_service = build("forms", "v1", credentials=creds)

操作步骤详解

接下来,我们将详细介绍如何实现上述两步策略。

1. 获取目标文件夹ID

首先,您需要知道目标Google Drive文件夹的ID。您可以通过以下方式获取:

  • 打开Google Drive,导航到您希望创建表单的文件夹。
  • 查看浏览器地址栏中的URL,文件夹ID通常是folders/后面的一串字符。 例如:https://drive.google.com/drive/folders/YOUR_FOLDER_ID_HERE
# 替换为您的目标文件夹ID
target_folder_id = "YOUR_TARGET_FOLDER_ID"

2. 通过Drive API在指定文件夹中创建空白Google表单

使用drive_service.files().create()方法来创建文件。关键在于设置正确的mimeType为application/vnd.google-apps.form,并指定parents参数为目标文件夹ID。

# 文件元数据,指定名称、MIME类型和父文件夹
file_metadata = {
    "name": "我的新项目表单", # 这是在Drive中显示的文件名
    "mimeType": "application/vnd.google-apps.form",
    "parents": [target_folder_id]
}

try:
    # 创建文件,并请求返回文件ID
    created_file = drive_service.files().create(
        body=file_metadata,
        fields="id"
    ).execute()

    form_id = created_file.get("id")
    print(f"空白表单已在指定文件夹中创建,ID: {form_id}")

except Exception as e:
    print(f"创建表单文件时发生错误: {e}")
    form_id = None # 确保在出错时form_id为None

执行此步骤后,一个名为“我的新项目表单”的空白Google表单将出现在您指定的Google Drive文件夹中。form_id变量将包含此新表单的唯一标识符。

3. 通过Forms API填充和更新表单内容

现在我们有了form_id,可以使用form_service.forms().batchUpdate()方法来修改表单的标题、描述以及添加问题等。

if form_id:
    # 构建更新请求体
    # 这里我们更新表单的标题和文档标题,并添加一个文本问题
    update_requests = {
        "requests": [
            {
                "updateFormInfo": {
                    "info": {
                        "title": "项目反馈表单", # 这是表单在Forms界面中显示的标题
                        "documentTitle": "项目反馈表单 - 2025 Q4" # 这是Drive中显示的文件名,与name一致更佳
                    },
                    "updateMask": "title,documentTitle"
                }
            },
            {
                "createItem": {
                    "item": {
                        "title": "您的姓名?",
                        "questionItem": {
                            "question": {
                                "textQuestion": {
                                    "paragraph": False
                                }
                            }
                        }
                    },
                    "location": {
                        "index": 0 # 在表单开头添加
                    }
                }
            },
            {
                "createItem": {
                    "item": {
                        "title": "您对本次项目的总体评价是?",
                        "questionItem": {
                            "question": {
                                "choiceQuestion": {
                                    "type": "RADIO",
                                    "options": [
                                        {"value": "非常满意"},
                                        {"value": "满意"},
                                        {"value": "一般"},
                                        {"value": "不满意"}
                                    ]
                                }
                            }
                        }
                    },
                    "location": {
                        "index": 1 # 在第一个问题之后添加
                    }
                }
            }
        ]
    }

    try:
        # 执行批量更新操作
        form_service.forms().batchUpdate(
            formId=form_id,
            body=update_requests
        ).execute()
        print(f"表单 '{form_id}' 内容已成功更新。")

    except Exception as e:
        print(f"更新表单内容时发生错误: {e}")
else:
    print("无法更新表单,因为表单ID无效。")

完整代码示例

将上述认证、创建和更新步骤整合到一个脚本中:

import os
from google.auth.transport.requests import Request
from google.oauth2.credentials import Credentials
from google_auth_oauthlib.flow import InstalledAppFlow
from googleapiclient.discovery import build

# --- 1. 认证和API服务构建 ---
SCOPES = [
    "https://www.googleapis.com/auth/drive.file",
    "https://www.googleapis.com/auth/forms.body"
]

creds = None
if os.path.exists("token.json"):
    creds = Credentials.from_authorized_user_file("token.json", SCOPES)
if not creds or not creds.valid:
    if creds and creds.expired and creds.refresh_token:
        creds.refresh(Request())
    else:
        flow = InstalledAppFlow.from_client_secrets_file("credentials.json", SCOPES)
        creds = flow.run_local_server(port=0)
    with open("token.json", "w") as token:
        token.write(creds.to_json())

drive_service = build("drive", "v3", credentials=creds)
form_service = build("forms", "v1", credentials=creds)

# --- 2. 定义目标文件夹ID ---
# 替换为您的目标文件夹ID
target_folder_id = "YOUR_TARGET_FOLDER_ID"
if target_folder_id == "YOUR_TARGET_FOLDER_ID":
    print("错误:请将 'YOUR_TARGET_FOLDER_ID' 替换为实际的Google Drive文件夹ID。")
    exit()

form_id = None
try:
    # --- 3. 通过Drive API在指定文件夹中创建空白Google表单 ---
    file_metadata = {
        "name": "我的新项目表单",
        "mimeType": "application/vnd.google-apps.form",
        "parents": [target_folder_id]
    }
    created_file = drive_service.files().create(
        body=file_metadata,
        fields="id"
    ).execute()

    form_id = created_file.get("id")
    print(f"空白表单已在指定文件夹中创建,ID: {form_id}")

    # --- 4. 通过Forms API填充和更新表单内容 ---
    if form_id:


# python  # js  # json  # go  # 浏览器  # app  # google  # 作用域  # python脚本  # red 


相关文章: 如何续费美橙建站之星域名及服务?  如何在阿里云虚拟服务器快速搭建网站?  c# F# 的 MailboxProcessor 和 C# 的 Actor 模型  头像制作网站在线制作软件,dw网页背景图像怎么设置?  广德云建站网站建设方案与建站流程优化指南  如何高效搭建专业期货交易平台网站?  如何解决ASP生成WAP建站中文乱码问题?  建站主机核心功能解析:服务器选择与网站搭建流程指南  如何通过FTP服务器快速搭建网站?  安云自助建站系统如何快速提升SEO排名?  企业在线网站设计制作流程,想建设一个属于自己的企业网站,该如何去做?  开封网站制作公司,网络用语开封是什么意思?  如何在宝塔面板创建新站点?  成都网站制作报价公司,成都工业用气开户费用?  韩国网站服务器搭建指南:VPS选购、域名解析与DNS配置推荐  php json中文编码为null的解决办法  如何用美橙互联一键搭建多站合一网站?  如何快速搭建个人网站并优化SEO?  西安大型网站制作公司,西安招聘网站最好的是哪个?  如何通过虚拟机搭建网站?详细步骤解析  深圳网站制作公司好吗,在深圳找工作哪个网站最好啊?  如何用西部建站助手快速创建专业网站?  零基础网站服务器架设实战:轻量应用与域名解析配置指南  网站图片在线制作软件,怎么在图片上做链接?  如何挑选最适合建站的高性能VPS主机?  微信小程序 五星评分(包括半颗星评分)实例代码  南京网站制作费用,南京远驱官方网站?  建站之星安装后如何配置SEO及设计样式?  如何在IIS服务器上快速部署高效网站?  如何在香港服务器上快速搭建免备案网站?  如何选购建站域名与空间?自助平台全解析  一键制作网站软件下载安装,一键自动采集网页文档制作步骤?  如何获取PHP WAP自助建站系统源码?  建站之星代理费用多少?最新价格详情介绍  建站之星与建站宝盒如何选择最佳方案?  已有域名和空间如何快速搭建网站?  建站之星后台密码遗忘?如何快速找回?  如何在景安云服务器上绑定域名并配置虚拟主机?  如何基于PHP生成高效IDC网络公司建站源码?  台州网站建设制作公司,浙江手机无犯罪记录证明怎么开?  武汉网站如何制作,黄黄高铁武穴北站途经哪些村庄?  如何用PHP快速搭建高效网站?分步指南  个人网站制作流程图片大全,个人网站如何注销?  文字头像制作网站推荐软件,醒图能自动配文字吗?  制作充值网站的软件,做人力招聘为什么要自己交端口钱?  制作网站外包平台,自动化接单网站有哪些?  网站建设制作需要多少钱费用,自己做一个网站要多少钱,模板一般多少钱?  网站制作公司哪里好做,成都网站制作公司哪家做得比较好,更正规?  深圳网站制作平台,深圳市做网站好的公司有哪些?  沈阳个人网站制作公司,哪个网站能考到沈阳事业编招聘的信息? 

您的项目需求

*请认真填写需求信息,我们会在24小时内与您取得联系。