【问题标题】:Dynamically Updating Formulas From Another Google Spreadsheet从另一个 Google 电子表格动态更新公式
【发布时间】:2019-06-01 18:57:02
【问题描述】:

我有两个谷歌电子表格,一个主副本和一个子副本。当我更新主副本中的公式时,我希望它也更新子副本中的公式。我打算创建子副本的许多副本,并且不想每次必须更改一些小的东西时都更新每个副本中的公式。

我试过使用 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 类的不同方法,我开始感到头疼。我看不到任何方法可以做到这一点,但我觉得我错过了一些东西。还有其他想法吗?

编辑 3: 好的。我想出了一个解决方法。基本上我所做的是使用 sheet.copyTo() 函数将整个工作表从一个电子表格复制到另一个电子表格。然后,我使用 range.copyTo() 来获得我想要的东西。然后我使用 sheet.deleteSheet() 删除了复制的工作表

【问题讨论】:

标签: javascript google-apps-script google-sheets google-sheets-formula custom-function


【解决方案1】:

自定义函数匿名运行,因此它们无法调用需要授权的服务,例如openById

不要使用自定义函数来执行脚本,而是使用自定义菜单等其他方法,将脚本分配给图像等,或者直接从脚本编辑器运行它。

注意:您将不得不稍微修改您的脚本或使用另一个函数来传递所需的参数。

【讨论】:

  • 感谢鲁本的评论!这真的很有帮助!我现在遇到另一个问题,我想知道您是否有其他解决方法?使用新问题编辑原始帖子。
  • 我很高兴能提供帮助,但编辑问题以发布新问题是使用本网站的错误方式。请阅读What should I do when someone answers my question?
猜你喜欢
  • 2015-03-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-05-21
  • 1970-01-01
  • 2021-06-27
相关资源
最近更新 更多