google-apps-script - 在 GAS 项目下跨多个脚本文件访问变量
问题描述
我有一个这样的项目:
测试项目
-- 代码.gs
-- 14885.gs
-- 23546.gs
我想创建一个变量并在“Code.gs”文件中设置它的值。然后我应该可以在 14885.gs 和 23456.gs 文件中访问它。
在 Code.gs 文件中,我使用了 PropertiesServices 并创建了一个我想在项目下的其他“gs”文件中访问的变量。
在 Code.gs 文件中
function onEdit(e){
totalHoursLoggedForStory_today = Number(e.range.getSheet().getRange("H3").getValue()) + Number(e.range.getSheet().getRange("H4").getValue()) + Number(e.range.getSheet().getRange("H5").getValue());
var userProperties = PropertiesService.getUserProperties();
var newProperties = {'hoursLogged': totalHoursLoggedForStory_today };
userProperties.setProperties(newProperties);
onEditOfH3(e);
}
在 23546.gs 文件中
function onEditOfH3(e){
if (e.range.getA1Notation() == "H3")
{
var temp= userProperties.getProperty('hoursLogged');
sh.alert(temp);
}
预期:在 23546.gs 文件中,我应该能够提醒我在“Code.gs”文件中设置的属性。
实际:我看到此错误:ReferenceError: userProperties is not defined
解决方案
- 您想使用在运行时的函数
userProperties
中给出的值。onEdit
onEditOfH3
onEdit
- 您想了解一个 GAS 项目中的文件规范。
如果我的理解是正确的,这个答案怎么样?请认为这只是几个答案之一。
关于一个 GAS 项目中的所有文件:
在 Google Apps Script 项目中,项目中的所有文件都作为一个项目使用。即,例如,当在 的文件中运行以下示例脚本时Code.gs
,
function myFunction() {
for (var i in this) {
if (typeof this[i] == "function") {
Logger.log(i)
}
}
}
返回项目中所有文件中的所有函数。由此可知,在 的文件中声明全局变量时Code.gs
,该变量可以在同一个项目的其他文件中使用。在以下模式 1 中,使用了它。
模式一:
在这种模式中,userProperties
被声明为全局变量。
修改后的脚本:
代码.gsvar userProperties; // This is declared as the global variable.
function onEdit(e){
totalHoursLoggedForStory_today = Number(e.range.getSheet().getRange("H3").getValue()) + Number(e.range.getSheet().getRange("H4").getValue()) + Number(e.range.getSheet().getRange("H5").getValue());
userProperties = PropertiesService.getUserProperties(); // Modified
var newProperties = {'hoursLogged': totalHoursLoggedForStory_today };
userProperties.setProperties(newProperties);
onEditOfH3(e);
}
23546.gs
这不需要修改。
模式二:
在此模式中,userProperties
被添加到 的对象中e
。并且该值用作e.userProperties
的函数onEditOfH3
。如果你不想使用全局变量,这个怎么样?此外,userProperties
可以作为另一个参数发送。
修改后的脚本:
代码.gsfunction onEdit(e){
totalHoursLoggedForStory_today = Number(e.range.getSheet().getRange("H3").getValue()) + Number(e.range.getSheet().getRange("H4").getValue()) + Number(e.range.getSheet().getRange("H5").getValue());
var userProperties = PropertiesService.getUserProperties();
var newProperties = {'hoursLogged': totalHoursLoggedForStory_today };
userProperties.setProperties(newProperties);
e.userProperties = userProperties; // Added
onEditOfH3(e);
}
23546.gs
function onEditOfH3(e){
// var sh = SpreadsheetApp.getUi(); // In your whole script, this might be declared at elsewhere.
if (e.range.getA1Notation() == "H3") {
var temp = e.userProperties.getProperty('hoursLogged'); // Modified
sh.alert(temp);
}
}
参考:
推荐阅读
- javascript - 使用 Javascript 删除 XML 标头
- php - PHP宏/将字段组合成一个变量
- reactjs - 如果 redux 调度成功,则重定向页面
- java - 无法在客户设备中运行移动仿真
- sql - 我想要一个 SQLquery 来找到每月最高的 MonthlyActiveUsers,这样每个月就聚合到一行
- excel - VBA将匹配值从列表复制到日历
- r - 使用打印命令设置控制台中显示的行数
- python-3.x - 如何使用pywinauto在子窗口中获取类名?
- javascript - 用于轮询的 javascript async 和 setInterval
- python-3.x - 在空闲、Powershell 和终端中是否有用于彩色文本输出的单个 python 模块?