【问题标题】:Custom Formula to look at a different GSheet自定义公式查看不同的 GSheet
【发布时间】: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


【解决方案1】:

正如TheMaster 所提到的,这里最好不要自定义函数。与通过脚本更新电子表格相比,它们设置了更多限制并且速度更慢——即使可能,用GetRngValue() 替换您的IMPORTRANGE() 函数也对您没有多大帮助。如果您要“从数百个其他文档中提取值”,那么您很可能应该进行大修。

documentation for custom functions 中,声明“自定义函数从不要求用户授权访问个人数据”。这包括电子表格数据,后来更加明确:

无法打开其他电子表格(SpreadsheetApp.openById()SpreadsheetApp.openByUrl())。

【讨论】:

  • 谢谢迭戈。这是一张汇总财产数据的表格,但在星期五之前我与它无关。然后他们让我添加一些图表。由于错误,这些方法不起作用。
  • @GlibGibon 尝试更改 IMPORTRANGE() 中的任何值,然后将其返回到原始公式。这应该会迫使它重新执行,我隐约记得它为我解决了以前的问题。
  • 我已将单元格字母从大写更改为小写,删除 = 以保留文本,然后将其放回 - 有数百个仅停留在 #REF 或 ...正在加载。我不确定是否超出了某些限制,但它们并不令人耳目一新。不过感谢您的提示。
  • 您能否分享链接,以便我们查看工作表的外观?
猜你喜欢
  • 1970-01-01
  • 2012-02-04
  • 1970-01-01
  • 1970-01-01
  • 2019-05-18
  • 2017-06-18
  • 2020-08-27
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多