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


使用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:如果您还需要读取表单响应,则需要此作用域。

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

    Text-To-Pokemon口袋妖怪 Text-To-Pokemon口袋妖怪

    输入文本生成自己的Pokemon,还有各种选项来定制自己的口袋妖怪

    Text-To-Pokemon口袋妖怪 1487 查看详情 Text-To-Pokemon口袋妖怪
    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在指定Google Drive文件夹中创建Google表单的教程的详细内容,更多请关注其它相关文章!


# js  # 大白兔奶糖营销推广活动主题  # 信息行业网站建设  # 已在  # 数据结构  # 客户端  # 操作步骤  # 自己的  # 如何实现  # 这是  # 夹中  # 表单  # python  # json  # go  # 浏览器  # app  # google  # 作用域  # python脚本  # red  # 您的  # seo快速排名法  # 优化网站的软件叫什么  # 免税店营销推广方案  # 有效的app推广网站  # 网站手机版跳转 seo  # 拼多多营销推广措施分析  # 推广流量卡网站是什么意思  # 淄博网站建设策略 


相关栏目: 【 Google疑问12 】 【 Facebook疑问10 】 【 优化推广96088 】 【 技术知识133117 】 【 IDC资讯59369 】 【 网络运营7196 】 【 IT资讯61894


相关推荐: 泰拉瑞亚水晶无法放置问题  抖音怎么解除第三方绑定_抖音解除第三方平台绑定方法介绍  抖音如何进行蓝V认证 抖音企业号申请所需资料与流程  iQOO手机信号差网络不稳定怎么办 信号问题原因排查与增强设置【攻略】  搜狗浏览器如何查找页面中的文字 搜狗浏览器Ctrl+F页面搜索功能  Win10截图远程协助 Win10远程桌面截屏法【场景应用】  铁路12306怎么申请退票_铁路12306退票申请操作流程  苹果手机如何清理系统缓存数据 iPhone非越狱清理垃圾文件的技巧【系统优化】  自定义你的VS Code状态栏,监控关键信息  《我的恋爱逃生攻略》中文名字输入方法  荣耀盒子应用管理技巧  cad怎么隐藏指定的图层_cad隐藏或冻结图层方法  宝妈做视频号该写什么标签话题?宝妈关注的话题有哪些?  Lar*el Dusk 测试中管理浏览器权限:以剪贴板访问为例  解决CSS容器溢出问题:使用calc()实现精确布局与边距控制  蜻蜓FM如何设置移动流量播放  动漫之家观看全集库 动漫之家免费资源网地址  《梦想世界:长风问剑录》药师一图流分享  包子漫画官网链接官方地址 包子漫画在线观看官网首页入口  QQ网站入口直接登录 QQ官方正版登录页面  OTT月报 | 2025年9月智能电视大数据报告  实时数据流中高效查找最小值与最大值  Go语言反射机制:如何访问被嵌入结构体遮蔽的方法  芒果TV官网登录入口 芒果TV官方网站登录入口  秋风萧瑟洪波涌起中的萧瑟指的是什么  C++中的explicit关键字有什么作用_C++类型转换控制与explicit使用  抖音商城官网是什么_抖音商城官方网址与访问方法  J*aScript大数运算_BigInt使用指南  腾讯QQ邮箱官方入口 QQ邮箱网页版登录平台  豆包AI怎样为教育场景定制答疑逻辑_为教育场景定制豆包AI答疑逻辑方案【方案】  多闪电脑版下载_多闪PC端模拟器使用  邦丰播放器频道搜索设置  京东快递物流信息不更新怎么办_物流停滞原因与处理方法  如何在mysql中比较InnoDB和MyISAM区别  CSS如何在页面中引入重置样式_使用Normalize.css或Reset.css统一浏览器默认样式  德邦快递收费标准详解  如何查询个人病历记录  2025考研成绩查询时间入口分享  智云Q3和Q2有什么升级_智云Q3与Q2手持云台功能与性能对比分析  《大周列国志》皇帝律令功能介绍  《密马》发布账号方法  解决Windows上Composer PATH变量冲突导致的命令无法识别问题  传统曲艺莲花落的表演形式是  漫蛙manwa漫画官网链接_漫蛙manwa最新可用网址推荐  电脑视频号|直播|如何分享屏幕  Git命令与VS Code UI操作的对应关系解析  C++ optional用法详解_C++17处理可能为空的返回值  Golang如何实现HTTP请求重试机制_Golang HTTP请求错误处理策略  使用jQuery精确检测除指定元素外任意位置的点击事件  Go语言中方法与接收器:指针和值类型的调用机制详解 

 2025-12-12

了解您产品搜索量及市场趋势,制定营销计划

同行竞争及网站分析保障您的广告效果

点击免费数据支持

提交您的需求,1小时内享受我们的专业解答。

运城市盐湖区信雨科技有限公司


运城市盐湖区信雨科技有限公司

运城市盐湖区信雨科技有限公司是一家深耕海外推广领域十年的专业服务商,作为谷歌推广与Facebook广告全球合作伙伴,聚焦外贸企业出海痛点,以数字化营销为核心,提供一站式海外营销解决方案。公司凭借十年行业沉淀与平台官方资源加持,打破传统外贸获客壁垒,助力企业高效开拓全球市场,成为中小企业出海的可靠合作伙伴。

 8156699

 13765294890

 8156699@qq.com

Notice

We and selected third parties use cookies or similar technologies for technical purposes and, with your consent, for other purposes as specified in the cookie policy.
You can consent to the use of such technologies by closing this notice, by interacting with any link or button outside of this notice or by continuing to browse otherwise.