当前位置: 首页 > 知识库问答 >
问题:

自动复制Google工作表中的行

谭昱
2023-03-14

我正在尝试编写一些函数

  1. 复制谷歌表单提交到从表单提交表到所有线索表
  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

共有1个答案

宦书
2023-03-14

由于您的电子表格中已经存储了条目,因此您只需运行此代码段一次,即可将已存储的值复制到它们所在的位置。这是通过使用getRange(row,col,numrows,numcols)方法收集表单响应表中需要的所有数据,然后使用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);
}

之后,您应该用下面的代码段替换上面的代码段:

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);
}

上面的代码片段的工作原理是从电子表格中获取最后一行,然后根据cell Value将其粘贴到正确的位置。要获取工作表的最后一行,使用了getLastRow()方法。

因为您希望它在每个表单提交上运行,所以您应该使用一个onFormSubmit()可安装触发器,并像这样配置它:

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

参考文献

>

  • Sheet类应用程序脚本-getRange();

    工作表类应用程序脚本-getLastRow();

    可安装触发器应用程序脚本。

  •  类似资料:
    • 我有一个多标签谷歌表。第一个是主表,我有一些基本的位置信息。在其他页面中,我通过“导入”传输这些基本信息,因此我有一些列动态更改,一些是静态的,用户可以更新。尽管如此,如果我在主工作表的数据之间添加一行,它只会更改动态列(从importrange更新),而其余列不会更改-这会影响更新。在主工作表中添加行时,是否有任何方法/脚本可以自动在其他工作表中添加行?

    • 我最近在GoogleSheets的脚本编辑器中添加了一个脚本,可以根据D列中的值对我的页面进行自动排序。该脚本被设置为应用于活动页面–我们称之为“sheet a” 使用工作表A,人们可以按降序查看数据排序,这很好。每次对图纸a进行更改/编辑时,数据都会自动恢复。 我在工作表A中做了大量的单元格合并、样式设置、条件格式设置等,我不想再重新创建它。所以我复制了A页- 问题:我在表A中添加的自定义脚本正

    • 我希望表2(标题为“托管交易”)按日期自动排序,表1(标题为“贷款查询”)按姓氏自动排序。两张表都在一张谷歌表中。我已经找到了下面的脚本,我对它进行了轻微的修改,它在第2页上的效果非常好,可以按日期自动排序; 但是,我希望第一张工作表按照第2列中的姓氏自动排序,而不是脚本所指的第7列 值得一提的是,我对脚本做了以下更改,并在下面的脚本中添加了按姓氏排序的脚本,该脚本在第1页的第2列中运行良好; 但

    • 上下文 我正在创建一个股票价格数据数据库。我目前正在使用下面的函数: 这允许在编辑单元格时对某些列执行编辑。到目前为止,它是有效的,但有一些扭结。 问题1 有时,当我编辑列的第四行上方的单元格时,它会编辑整个列,尽管我告诉它从第四行开始。这发生在几分钟前的一个单元格中,我告诉它排除上面的“I2”。我为此编写的代码有什么问题吗? 问题2我尝试为代码创建其他异常,其中对于某些指定的范围,它将仅从不同的

    • 我试图将活动工作表和2个指定工作表复制到一个新工作簿,然后让宏继续在新工作簿上运行,以便在保存它之前更改一些内容 null

    • 我正在尝试设置输入新数据时Google Sheets文档的自动排序。 链接到工作表:https://docs.google.com/spreadsheets/d/1h2-Gy67sTGKdMhG9GP-intB5fVdaJheZIcLo4Nto_Wg/edit?usp=sharing 显然,这些是玩家统计数据。我试图找出一个解决方案,让列“H”按降序对玩家进行排序。这意味着得分最多的玩家将是第一名