Google Apps Script获取IP异常:编辑器与工作表运行结果不同求助
问题描述
我使用的函数如下:
function getIPforApp() { var url = "http://api.ipify.org"; var rtn = UrlFetchApp.fetch(url); Logger.log('this is rtn : '+ rtn); return (rtn); }
在脚本编辑器中直接运行该函数时,日志显示的是我的IP(XX.xxx.44.166),符合预期;但在工作表中调用该函数时,日志显示的IP为107.178.195.39或35.243.23.187。请问此方法是否有误,能否指引正确方向?
原因分析
这是正常现象,不存在方法错误,差异根源是运行环境不同:
- 脚本编辑器直接运行时,请求由你的本地设备发起,走的是你的网络,所以返回你的公网IP。
- 工作表中调用函数时,代码在谷歌云端服务器执行,
UrlFetchApp的请求由谷歌服务器发出,返回的自然是谷歌服务器的公网IP,也就是你看到的那两个地址。
解决方向
如果你的需求是获取使用工作表的用户本地IP,当前方法做不到,因为谷歌表格自定义函数是云端执行的,无法直接获取用户本地网络IP。
要实现这个需求,只能换思路:
- 用客户端脚本(比如嵌入表格的侧边栏/对话框,结合HTML+JS),在用户浏览器里发起IP请求,再把结果传回谷歌脚本。
- 大致步骤:
- 写一个带JavaScript的HTML页面,在页面里调用ipify接口拿到用户IP。
- 通过谷歌脚本的
HtmlService把这个页面作为侧边栏或对话框打开。 - 客户端JS拿到IP后,用
google.script.run把数据传给服务器端脚本,再写入表格或记录日志。
内容的提问来源于stack exchange,提问作者wilstyx
相关产品推荐
相关产品推荐

