我有两个Google电子表格,一个主副本和一个子副本。当我更新主副本中的公式时,我也希望它也更新子副本中的公式。我打算创建子副本的许多副本,并且不想每次都必须更改一些较小的值时更新每个副本中的公式。
我尝试使用IMPORTRANGE(),它只给我值,而不是公式。因此,我想创建自己的脚本来完成此任务。我正在使用以下代码进行尝试:
function REMOTEDATA(inKey, inRange) {
var outData;
var ss = SpreadsheetApp.openById(inKey);
if (ss) {
outData = ss.getRange(inRange).getFormulas();
}
return outData;
}
//My manifest is the following:
{
"oauthScopes": [
"https://www.googleapis.com/auth/spreadsheets"
],
"timeZone": "America/Denver",
"dependencies": {
},
"exceptionLogging": "STACKDRIVER"
}
我是oAuth的新手,我不知道该如何使用它。当我尝试这样做时,它会给我以下内容:
“您无权调用SpreadsheetApp.openById。所需权限为https://www.googleapis.com/auth/spreadsheets(第4行)。”
谁能告诉我要使其正常工作需要添加什么?如果有更简单的方法,我会全力以赴。
编辑: 阅读下面的鲁本评论后,我将操作方式更改为在工作表上设置一个按钮即可运行该功能。它解决了第一个问题,但现在我遇到了另一个问题。我无法将所有数据直接从一张纸复制到另一张纸。我正在尝试获取公式,值和格式。如果我仅将getFormulas()和setFormulas()与范围一起使用,它将摆脱不是公式的所有值,并且不会更改格式。我一直在尝试使用copyTo(),但它告诉我在电子表格之间无法执行此操作。我当前的代码是:
function REMOTEDATA() {
var MASTERKEY = "key";
var UPDATERANGES = ["A1:B200", "C7:C200", "D1:H200", "J1:L200", "N1:S200", "U1:X200", "z1:ac200", "AE1:AH200", "AJ1:AL200"];
var ss = SpreadsheetApp.openById(MASTERKEY);
var cur_ss = SpreadsheetApp.getActiveSpreadsheet();
UPDATERANGES.forEach(function(range) {
data = ss.getRange(range).copyTo(cur_ss.getRange(range));
});
}
看着Ranges类的不同方法,我的头开始受伤。我看不到任何执行此操作的方法,但感觉好像缺少了一些东西。还有其他想法吗?
答案 0 :(得分:0)
自定义函数匿名运行,因此它们无法调用需要授权的服务,例如openById
。
不是使用自定义函数来执行脚本,而是使用其他方法(如自定义菜单),将脚本分配给图像等,或者只是从脚本编辑器中运行它。
注意:您将不得不稍微修改脚本或使用另一个函数来传递所需的参数。