使用Python在指定Google Drive文件夹中创建Google表单,核心是通过Google提供的Drive API和Forms API完成授权、表单创建、文件夹定位三个核心步骤,整个过程可以自动化执行,避免手动操作的繁琐。

前置准备
在编写代码前,需要完成以下配置:
- 拥有一个Google账号,并且可以正常访问Google Drive和Google Forms服务
- 在Google Cloud控制台创建项目,开启
Google_Drive_API和Google_Forms_API服务 - 创建OAuth 2.0客户端ID,下载对应的凭证文件,重命名为
credentials.json保存到项目目录 - 安装必要的Python依赖库,执行以下命令:
pip install google-auth google-auth-oauthlib google-auth-httplib2 google-api-python-client
核心实现步骤
1. 完成Google API授权
首先需要通过OAuth 2.0完成授权,获取访问令牌,代码如下:
from google.oauth2.credentials import Credentials
from google_auth_oauthlib.flow import InstalledAppFlow
from google.auth.transport.requests import Request
import os
# 定义需要申请的权限范围
SCOPES = [
'https://www.googleapis.com/auth/forms',
'https://www.googleapis.com/auth/drive'
]
def get_credentials():
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())
return creds
2. 创建Google表单
授权完成后,调用Forms API创建新的表单,设置表单的标题和基本信息:
from googleapiclient.discovery import build
def create_google_form(creds, form_title, form_description):
# 构建Forms服务
forms_service = build('forms', 'v1', credentials=creds)
# 定义表单的创建请求体
form_body = {
'info': {
'title': form_title,
'documentTitle': form_title,
'description': form_description
}
}
# 发起创建表单请求
result = forms_service.forms().create(body=form_body).execute()
form_id = result['formId']
print(f"表单创建成功,表单ID:{form_id}")
return form_id, result['responderUri']
3. 将表单移动到指定Google Drive文件夹
Google Forms创建后会默认保存到Drive的根目录,我们需要调用Drive API将其移动到指定的文件夹中,首先需要获取目标文件夹的ID:
def get_folder_id(creds, folder_name):
# 构建Drive服务
drive_service = build('drive', 'v3', credentials=creds)
# 查询指定名称的文件夹
query = f"name='{folder_name}' and mimeType='application/vnd.google-apps.folder' and trashed=false"
response = drive_service.files().list(q=query, spaces='drive').execute()
folders = response.get('files', [])
if not folders:
raise ValueError(f"未找到名称为{folder_name}的文件夹,请先在Drive中创建该文件夹")
return folders[0]['id']
def move_form_to_folder(creds, form_id, folder_id):
drive_service = build('drive', 'v3', credentials=creds)
# 获取表单当前的父目录ID
file = drive_service.files().get(fileId=form_id, fields='parents').execute()
previous_parents = ",".join(file.get('parents'))
# 更新表单的父目录为指定文件夹
drive_service.files().update(
fileId=form_id,
addParents=folder_id,
removeParents=previous_parents,
fields='id, parents'
).execute()
print(f"表单已成功移动到文件夹ID:{folder_id}中")
4. 整合完整流程
将上述步骤整合,实现完整的创建并移动表单的功能:
def main():
# 配置参数
FORM_TITLE = "用户满意度调查表单"
FORM_DESCRIPTION = "本表单用于收集用户对产品的满意度反馈"
TARGET_FOLDER_NAME = "表单存档" # 替换为你自己的Google Drive文件夹名称
# 获取授权凭证
creds = get_credentials()
# 创建表单
form_id, form_url = create_google_form(creds, FORM_TITLE, FORM_DESCRIPTION)
print(f"表单访问地址:{form_url}")
# 获取目标文件夹ID
folder_id = get_folder_id(creds, TARGET_FOLDER_NAME)
# 移动表单到指定文件夹
move_form_to_folder(creds, form_id, folder_id)
if __name__ == '__main__':
main()
注意事项
- 首次运行代码时会弹出Google账号授权页面,需要登录有对应文件夹访问权限的账号完成授权
- 目标文件夹必须已经存在,代码不会自动创建文件夹,如果不存在会抛出对应异常
- 凭证文件
credentials.json需要妥善保管,不要泄露给他人,避免账号权限被滥用 - 如果后续需要修改表单的问题内容,可以调用Forms API的
forms().batchUpdate()方法实现,具体可以参考Google官方API文档
PythonGoogle_DriveGoogle_FormsGoogle_API修改时间:2026-06-25 16:42:22