【发布时间】:2020-09-15 18:30:45
【问题描述】:
我仍在尝试使用脚本来解决问题,所以如果这是基本的,我深表歉意。
我有一个从数百个其他文档中提取值的摘要电子表格。这使用了(太多)importrange 公式,但其中许多现在是#REF 或 ...Loading。
我正在尝试创建一个自定义公式,该公式将模仿 importrange 函数并返回值。 我认为困难的部分是在更新另一个文档时更新公式,但我一开始就失败了。
这是我的代码。
function GetRngValue(ShtURL, GetRng) {
// find id from shtURL? - check if the workbook was updated in the last minute
Logger.log(ShtURL);
var Source = SpreadsheetApp.openByUrl(ShtURL);
// IF Source lastupdated > ThisSht lastupdated then [ Ensure update runs at startup though ]
if (DriveApp.getFileById(Source.getId()).getLastUpdated() > DriveApp.getFileById(SpreadsheetApp.getActiveSpreadsheet().getId()).getLastUpdated()) {
var shtNm = GetRng.substring(1,find("!")-1);
Logger.log(shtNm);
var myRng = GetRng.substring(find("!")+1,len(GetRng));
Logger.log(myRng);
TargetRng = Source.getSheetByName(shtNm)
var TargetRng = Source.getSheetByName(shtNm).getRange("'"+myRng+"'").getValues;
Logger.log(TargetRng);
return TargetRng;
};
Logger.log("First - "+DriveApp.getFileById(Source.getId()).getLastUpdated()+" meets last - "+DriveApp.getFileById(SpreadsheetApp.getActiveSpreadsheet().getId()).getLastUpdated());
Logger.log("Ending");
}
我收到错误: 例外:您无权调用 SpreadsheetApp.openByUrl。所需权限:https://www.googleapis.com/auth/spreadsheets(第 4 行)。
单元格中的公式为:=GetRngValue("""https://docs.google.com/spreadsheets/d/1axNelBTg4j..etc..7xJx2lSk/edit""", """Summary!B32" "") 谁能指出我正确的方向?我不能从自定义公式中引用另一个 GSheet 吗?
【问题讨论】:
-
我不能从自定义公式中引用另一个 GSheet 吗? 是的。服务帐户有一个扭曲的解决方法,但你最好使用自定义函数来实现它的用途,并使用菜单/按钮/触发器来代替
-
感谢大师的回复。完全随机,但是如果我要设置一个触发器来查看包含 importrange 公式的所有单元格,有没有办法可以设置显示的值而不覆盖下面的公式?
-
没有。但为什么?公式是公式,脚本是脚本。不要混合它们。仅使用脚本从不同的工作表中获取数据并将它们设置为工作表。
-
我想我终于疯了。每行与不同的属性相关(具有自己的 Gsheet),每列用于不同的单元格(全部不连续)。如果我输入值,那么我会丢失单元格和工作表链接。我已经停止思考了。
标签: google-apps-script google-sheets google-api google-drive-api