如何通过Google Sheets调用Google Colaboratory脚本?
实现Google Sheets按钮调用Colab部署的Python脚本方案
1. 把Colab脚本转成可触发的HTTP接口
你已经在Colab跑通了Python脚本,现在需要把它封装成能通过HTTP请求触发的服务,这里提供快速落地的方法:
- 在Colab安装ngrok:
!pip install pyngrok - 导入并设置ngrok的授权token(去ngrok官网免费获取):
from pyngrok import ngrok ngrok.set_auth_token("你的ngrok授权token") - 用Flask写一个简单接口,把你的gspread业务逻辑包裹进去:
from flask import Flask import gspread from oauth2client.service_account import ServiceAccountCredentials app = Flask(__name__) # 你的gspread业务逻辑 def execute_python_task(): scope = ["https://spreadsheets.google.com/feeds", "https://www.googleapis.com/auth/drive"] creds = ServiceAccountCredentials.from_json_keyfile_name("你的服务账号密钥.json", scope) client = gspread.authorize(creds) sheet = client.open("目标表格名称").sheet1 # 这里替换成你实际的表格操作逻辑 sheet.update_cell(1, 1, "通过按钮触发的Colab脚本更新") @app.route('/run-task', methods=['POST']) def run_task(): execute_python_task() return "脚本执行完成" # 启动服务并生成公网访问地址 public_url = ngrok.connect(5000) print("公网接口地址:", public_url) app.run(port=5000) - 运行代码后复制输出的公网地址,格式类似
https://xxxx-xx-xx-xx-xx.ngrok.io/run-task
2. 在Google Sheets中编写触发用的Apps Script
- 打开目标Google Sheets,点击顶部菜单「扩展程序」→「Apps Script」
- 删除默认代码,写入以下脚本(替换成你的公网接口地址):
function triggerColabScript() { const apiUrl = "你的ngrok公网接口地址/run-task"; const requestOptions = { method: "POST", muteHttpExceptions: true // 便于查看请求错误信息 }; const response = UrlFetchApp.fetch(apiUrl, requestOptions); // 可选:弹出执行结果提示 SpreadsheetApp.getUi().alert(response.getContentText()); } - 保存脚本(命名例如
ColabScriptTrigger),首次运行会提示权限授权,按指引完成授权即可
3. 给Sheets添加按钮并绑定脚本
- 返回Sheets界面,点击「插入」→「绘图」,绘制一个按钮样式的图形(比如矩形,添加文字「执行Python脚本」)
- 选中绘制好的图形,点击右上角三个点,选择「分配脚本」,输入刚才的函数名
triggerColabScript - 现在点击这个按钮,就会触发Apps Script请求你的Colab接口,执行Python代码
注意事项
- ngrok免费版的公网地址会在Colab重启后变化,若需要稳定地址,建议将Python脚本部署为Google Cloud Function或Cloud Run,获取固定域名
- 服务账号密钥需妥善保管,可通过Colab的「文件」→「上传」功能将密钥文件导入环境
- 测试时可先在浏览器中手动发送POST请求到接口地址,确认脚本能正常执行后再绑定按钮
内容的提问来源于stack exchange,提问作者ard
相关产品推荐
相关产品推荐

