【问题标题】:Script for copying parts of a google spreadsheet row to another spreadsheet and adding a value all based on a cell用于将 google 电子表格行的一部分复制到另一个电子表格并添加全部基于单元格的值的脚本
【发布时间】:2018-09-05 07:54:54
【问题描述】:

我对编码非常陌生,并且在编写这段代码时非常吃力。我希望有人可以帮助我。这是我想要完成的事情:

当“为吉姆审查的 2018 年 2 周快照”的第 19 列(“S”)中放置“y”或“Y”时,我想复制该行的 B:G 和 J:R 列。

将复制的行放在另一个名为“会计”的电子表格中,并在 C:Q 列上有一个名为“未处理的帐户数据”的标签。

然后我需要在粘贴的“JT”行的 B 列中写入。

最后,将原来的“y”更新为“Copied”。

这是两个测试文档的链接,以防万一。

2 week Snapshot

Accounting

function myFunction(e) {
  var sourceSheetName = "Reviewed 2018 2 Week Snapshot for Jim";
  var destinationSpreadsheetId = "1l1f6SrN7d6hYDhfv8W_ne15vAd7xSJlC6138jpoXpC4";
  var destinationSheetName = "Unprocessed Acct Data";

  if (e.source.getSheetName() == sourceSheetName && e.range.getcolumn() == 19 && e.value.toUpperCase() == "Y") {
    var sourceValues = e.source.getRange("B:G" && "J:R").getValues().filter(function(e){return e.filter(String).length > 0});
    var tss = SpreadsheetApp.openById(destinationSpreadsheetId);
    var ts = tss.getSheetByName(destinationSheetName);
    ts.getRange(ts.getLastRow() + 1, 1, sourceValues.length, sourceValues[0].length).setValues(sourceValues);
  }
}

【问题讨论】:

    标签: google-apps-script google-sheets google-sheets-api


    【解决方案1】:

    如果我对你的问题的理解是正确的,那么这个修改怎么样?我认为您的情况有几个答案。因此,请将此视为其中之一。

    修改点:

    • Reviewed 2018 2 Week Snapshot for Jim 中检索“B:R”的值作为源值。
      • 将检索放入 Y 的行的“B”列到“R”列的值。
    • 从源值中检索“B:G”和“J:R”的值,并添加“JT”。
    • 将修改后的值放到文件ID为1l1f6SrN7d6hYDhfv8W_ne15vAd7xSJlC6138jpoXpC4的电子表格的“B:Q”到Unprocessed Acct Data
    • Reviewed 2018 2 Week Snapshot for Jim上的Y修改为Copied

    修改脚本:

    请进行如下修改。

    从:
    if (e.source.getSheetName() == sourceSheetName && e.range.getcolumn() == 19 && e.value.toUpperCase() == "Y") {
      var sourceValues = e.source.getRange("B:G" && "J:R").getValues().filter(function(e){return e.filter(String).length > 0});
      var tss = SpreadsheetApp.openById(destinationSpreadsheetId);
      var ts = tss.getSheetByName(destinationSheetName);
      ts.getRange(ts.getLastRow() + 1, 1, sourceValues.length, sourceValues[0].length).setValues(sourceValues);
    }
    
    到:
    if (e.source.getSheetName() == sourceSheetName && e.range.getColumn() == 19 && e.value.toUpperCase() == "Y") {
      var row = e.range.getRow();
      var sourceValues = e.source.getRange("B" + row + ":R" + row).getValues()[0];
      var values = [sourceValues.slice(0, 6).concat(sourceValues.slice(8, 17))];
      values[0].unshift("JT");
      var tss = SpreadsheetApp.openById(destinationSpreadsheetId);
      var ts = tss.getSheetByName(destinationSheetName);
      ts.getRange(ts.getLastRow() + 1, 2, values.length, values[0].length).setValues(values);
      e.range.setValue("Copied");
    }
    

    注意:

    • 在您的共享电子表格中,有几个项目和功能。所以当你使用这个修改后的脚本时,请给它一个新的函数名(例如,它是myFunction2(e)),并请给它安装触发器。如果函数名重复,则脚本无法正常工作。

    如果我误解了你的问题,请告诉我。我想修改它。

    【讨论】:

    • 您的答案在测试表中完美运行。当我将它带到实际工作表并用文件 ID 替换电子表格时,它停止工作。我已经尝试过 onEdit 和每分钟的触发器。如何测试以查看失败的地方?
    • @Leilani 感谢您的回复。得知我对​​您的问题的理解是正确的并且脚本有效,我松了一口气。对于你的新问题,很遗憾,我无法理解你的情况。这些是关于stops working、修改后的脚本和您的电子表格。你能提供吗?如果可以,请将其添加到您的问题中。我想通过了解您如何修改和设置脚本来考虑您的新问题。我真的很抱歉我的英语水平不好。
    • @Leilani 作为重点,我认为如果电子表格的格式和工作表名称在您的问题的电子表格和您的实际电子表格之间相同并且该功能作为触发器安装,则脚本作品。所以首先,请确认它们。并且您能否确认您的电子表格的几个项目中是否没有重复的函数名称?即使你确认了,当问题没有解决时,你能提供我上面评论的信息吗?
    • 我已经确认了工作表的名称,并且没有标题为“myFunction(e)”的重复函数。不幸的是,我公司的谷歌政策非常严格,所以我无法分享实际的表格。我可以在其中添加日志以查看它可能失败的地方吗?
    • @Leilani 如果没有详细信息,我无法直接解决问题。我真的很抱歉我的技能不好。但是例如,如何使用修改后的脚本将实际工作表的值复制到工作表?在这种情况下,环境与工作表相同。即使您这样做了,如果它不起作用,您能否提供一个复制相同问题的示例电子表格?我可以问你stops working吗?我无法理解这个含义。
    猜你喜欢
    • 2013-07-14
    • 2013-11-16
    • 2019-02-06
    • 1970-01-01
    • 2017-10-10
    • 2020-02-17
    • 1970-01-01
    • 1970-01-01
    • 2021-05-08
    相关资源
    最近更新 更多