Google apps script 用于将google电子表格行的一部分复制到另一个电子表格并添加一个值的脚本(全部基于单元格)

Google apps script 用于将google电子表格行的一部分复制到另一个电子表格并添加一个值的脚本(全部基于单元格),google-apps-script,google-sheets,google-sheets-api,Google Apps Script,Google Sheets,Google Sheets Api,我是一个非常新的编码和真正的挣扎写这段代码。我希望有人能帮助我。以下是我试图实现的目标: 当“Jim回顾2018 2周快照”的第19列(“S”)中出现“y”或“y”时,我想复制该行的B:G&J:R列 将复制的行放在另一个标题为“会计”的电子表格上,在C:Q列上有一个标题为“未处理的会计数据”的选项卡 然后我需要在粘贴行“JT”的B列中写入 最后,将原始“y”更新为“复制” 这里是两个测试文档的链接,以备参考 如果我对你的问题的理解是正确的,那么这次修改如何?我认为对于你的情况有几个答案。因此

我是一个非常新的编码和真正的挣扎写这段代码。我希望有人能帮助我。以下是我试图实现的目标:

当“Jim回顾2018 2周快照”的第19列(“S”)中出现“y”或“y”时,我想复制该行的B:G&J:R列

将复制的行放在另一个标题为“会计”的电子表格上,在C:Q列上有一个标题为“未处理的会计数据”的选项卡

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

最后,将原始“y”更新为“复制”

这里是两个测试文档的链接,以备参考


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

修改点:
  • 从Jim的2018年2周快照中检索“B:R”值作为源值。
    • 检索放置了
      Y
      的行中从“B”列到“R”列的值
  • 从源值中检索“B:G”和“J:R”的值,并添加“JT”
  • 将修改后的值放入文件ID为
    1L1F6SRN7D6HYDHFFV8W_ne15vAd7xSJlC6138jpoXpC4的电子表格的
    未处理的账户数据
    “B:Q”
  • Y
    修改为
    复制的
    on
    查看了Jim的2018年2周快照
修改脚本: 请修改如下

发件人: 致: 注:
  • 在共享电子表格中,有多个项目和函数。因此,当您使用此修改后的脚本时,请提供一个新的函数名(例如,它是
    myFunction2(e)
    ),并请为其安装触发器。如果函数名重复,则脚本无法正常工作

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

你的答案在测试表中非常有效。当我把它放到实际的工作表中,并用文件ID替换电子表格时,它就停止工作。我每分钟都在尝试OneEdit和on两个触发器。我如何测试它失败的地方?@Leilani感谢你感谢您的回复。我很高兴知道我对您的问题的理解是正确的,并且脚本有效。对于您的新问题,很遗憾,我无法理解您的情况。这些是关于
停止工作
、修改后的脚本和您的电子表格。您可以提供它们吗?如果可以,请将其添加到您的问题中。我将我想通过了解您是如何修改脚本和设置脚本来思考您的新问题。我真的很抱歉我的英语水平很差。@Leilani作为重点,我认为如果您的问题的电子表格和实际的电子表格的格式和表名相同,并且该函数是作为触发器安装的呃,脚本是有效的。所以首先,请确认它们。你也可以确认你的电子表格中的几个项目中是否没有重复的函数名吗?即使你确认了它们,当问题没有解决时,你能提供我在上面评论的信息吗?我已经确认了表的名称,并且没有标题为“myFunction(e)”的重复函数“。不幸的是,我的公司谷歌政策非常严格,因此我无法共享实际的表单。我是否可以将日志添加到此日志中,以查看它可能失败的地方?@Leilani如果没有详细信息,我无法直接解决问题。我真的很抱歉我的技术很差。但例如,如何使用修改后的脚本将实际工作表的值复制到工作表?在这种情况下,环境与工作图纸相同。即使你这样做了,如果它不起作用,你能提供一个复制相同问题的样本电子表格吗?我可以问一下关于停止工作的问题吗?我不能理解这个意思。
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);
  }
}
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");
}