【问题标题】:Google Sheets/Apps Script Copy Formula to new row谷歌表格/应用程序脚本将公式复制到新行
【发布时间】:2020-02-24 13:22:49
【问题描述】:

对此仍然相当陌生。我已经能够使用复选框在单独的选项卡上触发新行的创建。在这个新选项卡上,有一列包含公式。创建新行时(在第一行之上),我想要新行中的公式。这是我目前所拥有的:

  if(sheet.getSheetName() == CLIENTS) {
    var checkCell = ss.getActiveCell();
    var checked = checkCell.getValue();
    var clientNameCell = checkCell.offset(0,-8).getValue();
    var clientType = checkCell.offset(0,-7).getValue();
    var sessionChargeCell = checkCell.offset(0, -6).getValue();
    var groupChargeCell = checkCell.offset(0,-5).getValue();
    var softwareFee = checkCell.offset(0,-4).getValue();
    var billFee = checkCell.offset (0,-3).getValue();
    var targetSheet = ss.getSheetByName("Client Billing Projections");
    var lCol = targetSheet.getLastColumn();
    if (checkCell.getColumn() == NEWCLIENTCHECK && checked == true) {
      var target = targetSheet.getRange(2, 1, 1, lCol);
      var formulas = target.getFormulas();
      targetSheet.insertRowBefore(2);
      var newRow = targetSheet.getRange(2,1,2,lCol);
      newRow.setFormulas(formulas);
    }
  }

我猜我卡在targetSheet.insertRowBefore(2); 之后。我认为这与我对 getFormulas 和 setFormulas 的使用有关,但我真的无法理解它。这里没有语法错误。如您所见,我从第一张表(客户)中收集了值;我打算将它复制到另一个选项卡上,但我也必须复制公式。任何帮助将不胜感激。

Here is an example of the sheet 里面已经有很多工作代码了。您将在这里看到的大部分内容可能在第 222 - 238 行之间。到目前为止,其他所有内容都有效。

【问题讨论】:

  • 为了正确了解您的情况,您能否提供一个示例电子表格和用于复制您的问题的脚本?当然,请删除您的个人信息。
  • 请参考How to ask 以尝试改进您的问题,并请正如@Tanaike 所说,在其中包含您的问题副本的示例表。
  • 我添加了一个示例链接。删除信息
  • 感谢您回复并提供示例电子表格。从中,我提出了一个修改后的脚本作为答案。你能确认一下吗?如果我误解了您的问题并且这不是您想要的方向,我深表歉意。

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


【解决方案1】:
  • 运行脚本时,会在Client Billing Projections 工作表的第 2 行插入一个新行。
  • 您想将公式放入插入行的“N”列中。

如果我的理解是正确的,那么这个修改呢?

修改点:

  • 在您的脚本中,公式由var formulas = target.getFormulas()var target = targetSheet.getRange(2, 1, 1, lCol); 检索。这是包含一行的二维数组。检索到的公式使用newRow.setFormulas(formulas)var newRow = targetSheet.getRange(2,1,2,lCol) 放置。在这种情况下,formulas 具有包含 2 行的二维数组。
    • 我认为您的问题可能是这个原因。

修改脚本:

当你的脚本被修改时,请进行如下修改。

从:
var newRow = targetSheet.getRange(2,1,2,lCol);
到:
var newRow = targetSheet.getRange(2,1,1,lCol);

参考:

【讨论】:

  • 谢谢你,你已经做到了!我想这是我错过的一些简单的事情。我只是不知道那是什么。这成功了。
  • @Stephen Foltz 感谢您的回复。我很高兴你的问题得到了解决。也谢谢你。
猜你喜欢
  • 1970-01-01
  • 2022-01-22
  • 2018-07-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-05-29
相关资源
最近更新 更多