hel*_*rld 2 javascript google-sheets google-apps-script
我想要实现的目标
我有2张电子表格A&B.
A 有2列 - 名称,金额(主列表)
B 有4列 - 名称,金额,X,Y(交易清单)
名称列Sheet B引用名称列的Sheet A数据.只要选择了名字,我想填充量列B在列金额sheet A为哪些用户可以覆盖的占位符.为此,我计划将Sheet A数据加载到一个数组(全局可用)中,以便onEdit(e)我可以引用该数组而不是访问Sheet B.
但我可以找到的选项 - CacheService并PropertyService- 只保存字符串值.但我希望:
var myGlobalArray = [];
function on init(){
//iterate and fill the array such that it has following output
//myGlobalArray[Name1] = 1
//myGlobalArray[Name2] = 2
//myGlobalArray[Name3] = 3
}
function onEdit(e){
//if selected value is name1, populate myGolbalArray[Name1] value in Amount
}
Run Code Online (Sandbox Code Playgroud)
问题 在哪里以及如何定义myGlobalArray?
我试图用高速缓存服务,JSON.Stringify并JSON.parse但数组是空的onEdit.
每次调用脚本都会创建一个具有自己唯一全局变量的脚本的新实例.每次调用脚本时,您实际上都会找到该特定实例的全局"this".将PropertyService视为保存数据的持久方法是正确的.
马上关闭我看到你的globalArray设置不正确:
var myGlobalArray = [];
Run Code Online (Sandbox Code Playgroud)
需要是
var myGlobalArray = {};
myGlobalArray['name1'] = 1
myGlobalArray['name2'] = 2
myGlobalArray['name3'] = 3
//myGlobalArray = {name3=3.0, name1=1.0, name2=2.0}
var stringArray = JSON.stringify(myGlobalArray)
//{"name1":1,"name2":2,"name3":3};
Run Code Online (Sandbox Code Playgroud)
现在可以保存到属性存储中并从中读取.
PropertiesService.getScriptProperties().setProperty("NameArray", stringArray);
stringArray = PropertiesService.getScriptProperties().getProperty("NameArray");
myGlobalArray = JSON.parse(stringArray);
Logger.log(myGlobalArray['name1']) // returns 1
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1547 次 |
| 最近记录: |