【问题标题】:Auto Copying Rows in Google Sheets在 Google 表格中自动复制行
【发布时间】:2020-02-26 19:54:03
【问题描述】:

我正在尝试编写一些函数

  1. 将 google 表单提交从“表单提交”表复制到“所有潜在客户”表
  2. 根据单元格值 =“open”,将整行从“All Leads”表移动到“Open Leads”表
  3. 根据单元格值“已关闭/丢失/空白”将整行数据移回“所有潜在客户”或“已关闭”、“丢失”工作表

 var sheetNameToWatch = "Form Responses";
 var columnNumberToWatch = 3;
 var sheetNameToMoveTheRowTo = "All Leads";

 var ss = SpreadsheetApp.getActiveSpreadsheet();
 var sheet = SpreadsheetApp.getActiveSheet();
 var range = sheet.getActiveCell();

 if (sheet.getName() == sheetNameToWatch && range.getColumn() == columnNumberToWatch && isBlank(range) == FALSE) {
   var targetSheet = ss.getSheetByName(sheetNameToMoveTheRowTo);
   var targetRange = targetSheet.getRange(targetSheet.getLastRow() + 1, 1);
   sheet.getRange(range.getRow(), 1, 1, sheet.getLastColumn()).moveTo(targetRange);
   //sheet.deleteRow(range.getRow());

 }

}

但我没有得到它来触发 onEdit 或 onFormSubmission。感谢您提供任何帮助,您可以告诉我我是脚本新手。

这是共享的谷歌电子表格

https://docs.google.com/spreadsheets/d/13090GHrXY17lRzA9ppQHZZGyT9yUNk6hMMXDQIKmddI/edit?usp=sharing

【问题讨论】:

  • 我无法理解I'm not getting this to trigger onEdit or onFormSubmission.。可以问一下它的详细情况吗?另外,我能问一下你当前的剧本问题吗?
  • 嗨,库珀,感谢您回复我。当然 - 在谷歌脚本中,有一个“为这个函数创建一个触发器来运行”,并通过谷歌表单特别是这个:forms.gle/6HvpLaotQSN7MhiQ7 - 信息存储在工作表中:“表单提交” - 我想触发这个函数'关于表单提交'
  • 更清楚一点 - 我在我之前的评论中将客户的数据输入到 that^ 表单中。然后将数据添加到工作表:“表单提交”。我想将数据逐字逐句复制到新工作表中,所以我使用的方法是 - 我试图让它检查第 3 列:isBlank(false) 的'timestamp' - 然后复制该行到新工作表。

标签: google-apps-script google-sheets


【解决方案1】:

由于您已经在电子表格中存储了条目,因此您应该只运行一次此 sn-p 以将已存储的值复制到它们的位置。这是通过使用getRange(row, col, numrows, numcols) 方法从Form Responses 工作表中收集所有需要的数据,然后使用setValues() 方法粘贴这些值来实现的。

function copyStuff() {
  var spreadsheet = SpreadsheetApp.openById("ID_OF_YOUR_SPREADSHEET");
  var allLeads = spreadsheet.getSheetByName("All Leads");
  var formSub = spreadsheet.getSheetByName("Form Responses");
  var valsFromForm = formSub.getRange(3, 1, 53, 13).getValues();
  allLeads.getRange(2, 1, 53, 13).setValues(valsFromForm);
}

之后,你应该用这个替换上面的sn-p:

function onFormSubmit() {
  var spreadsheet = SpreadsheetApp.openById("ID_OF_YOUR_SPREADSHEET");
  var allLeads = spreadsheet.getSheetByName("All Leads");
  var formSub = spreadsheet.getSheetByName("Form Responses");

  var openSheet = spreadsheet.getSheetByName("Open Leads");
  var closedSheet = spreadsheet.getSheetByName("Closed");
  var lostSheet = spreadsheet.getSheetByName("Lost");

  var lastVals = formSub.getRange(formSub.getLastRow(), 1, 1, 13).getValues();
  allLeads.getRange(allLeads.getLastRow(), 1, 1, 13).setValues(lastVals);


  var cellValue = spreadsheet.getSheetByName("THE_NAME_OF_YOUR_SHEET_WHERE_CELL_VALUE_IS").getValue();

  if (cellValue == "OPEN")
    openSheet.getRange(openSheet.getLastRow(), 1, 1, 13).setValues(lastVals);
  else if (cellValue == "CLOSED")
    closedSheet.getRange(closedSheet.getLastRow(), 1, 1, 13).setValues(lastVals);
  else if (cellValue == "LOST")
    lostSheet.getRange(lostSheet.getLastRow(), 1, 1, 13).setValues(lastVals);


  var lastVals = formSub.getRange(formSub.getLastRow(), 1, 1, 13).getValues();
  allLeads.getRange(allLeads.getLastRow(), 1, 1, 13).setValues(lastVals);
}

上述 sn-p 的工作原理是从电子表格中获取最后一行,然后根据 cellValue 将其粘贴到正确的位置。要获取工作表的最后一行,使用了getLastRow() 方法。

由于您希望它在每次提交表单上运行,您应该使用onFormSubmit() 可安装触发器,并像这样配置它:

注意:您必须将脚本链接到表单。

参考

【讨论】:

  • 太棒了,它奏效了,我正在慢慢将这些碎片拼凑在一起。
猜你喜欢
  • 2019-08-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多