【问题标题】:copy rows that contains certain value and paste it to another sheet复制包含特定值的行并将其粘贴到另一个工作表
【发布时间】:2021-12-31 13:18:19
【问题描述】:

我正在尝试创建一个包含数据库主表和 8 个不同位置的工作表。

所以每次我向数据库提交表单时,我都希望我的代码能够读取提交表单的 HUB 位置。并将提交的表格的详细信息复制到相关表格。这是我目前所拥有的。

基本上,如果我描述流程会更容易:

  1. 用户输入相关信息
  2. 表单将其提交到数据库表
  3. 代码然后查看它用于哪个集线器,然后将详细信息复制到相关工作表中,但在数据库主表中保留一份副本。

我希望这是有道理的?

【问题讨论】:

  • onFormSubmit 触发器的事件对象是什么样的。具体来说,namedValues() 和 values() 是什么样的?从表单提交触发器更容易做到。
  • 很抱歉我是新手,我不太明白你的意思:(
  • 您可以创建一个 onFormSubmit 触发器,以便当表单将数据提交到电子表格时,它可以调用您选择的函数,并且触发器会使用具有数组的事件对象预加载该函数的第一个参数命名值和包含所有提交数据的对象名称 namedValues()。最好从表单提交触发器中获取数据,因为这样您的工作表始终保持最新状态。
  • 您应该学习如何正确发布您的代码。我们不喜欢以图片形式发布的代码

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


【解决方案1】:

据我所知,您希望将表单的答案提交给主表格,然后在提交答案后将其发送到相关表格

为此,我将创建一个表单提交,将答案放在工作表中

  const SOURCE_FORM_ID = link; // Change according to your needs

 {
  const form = FormApp.openById(SOURCE_FORM_ID);
  ScriptApp.newTrigger("onFormSubmitTrigger")
    .forForm(form)
    .onFormSubmit()
    .create();
  }



function onFormSubmitTrigger(e) {
  const targetSpreadsheet = SpreadsheetApp.openById("insert sheet id");
  const targetSheet = targetSpreadsheet.getSheetByName("C");
  if (targetSheet.getLastRow() === 0) { // Add headers if they don't exist yet
    const itemTitles = e.source.getItems().map(item => item.getTitle()); // Get item titles
    itemTitles.unshift("Timestamp"); // Append "Timestamp" to the sheet (if desired)
    targetSheet.appendRow(itemTitles); // Append form item titles to the sheet
  }
  const itemResponses = e.response.getItemResponses();
  const responses = itemResponses.map(itemResponse => itemResponse.getResponse()); // Get user responses
  responses.unshift(new Date()); // Add today's date to the responses (if desired)
  targetSheet.appendRow(responses.map(e => Array.isArray(e) ? e.join(",") : e)); // Append responses to the sheet
}

上面的代码将创建一个链接到您的表单的触发器,该触发器会将答案提交到特定工作表

之后编辑或手动触发的代码将其移动到相关工作表

  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var seet = ss.getSheetByName('TC'); //source sheet
  var testrange = seet.getRange('J:J'); //range to check
  var testvalue = (testrange.getValues());
  var csh = ss.getSheetByName('C'); //destination sheet
  var data = [];
  var j =[];

  //Condition check in H:H; If true copy the same row to data array
for (i=0; i<testvalue.length;i++) {
  if ( testvalue[i] == 'SENT') {
  data.push.apply(data,seet.getRange(i+1,1,1,25).getValues());
  //Copy matched ROW numbers to j
  j.push(i);
 }
 }
//Copy data array to destination sheet

 csh.getRange(csh.getLastRow()+1,1,data.length,data[0].length).setValues(data);

//Delete matched rows in the source sheet
  for (i=0;i<j.length;i++){
  var k = j[i]+1;
  sheet.deleteRow(k);

//Alter j to account for deleted rows
  if (!(i == j.length-1)) {
  j[i+1] = j[i+1]-i-1;
}

上面的代码是我用来将一行移动到另一张表的内容,稍作修改,如果您设置表单提交以发送表单数据到主控

【讨论】:

  • 非常感谢!这是有道理的
  • 很高兴听到,如果您需要更多帮助,请随时询问
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-11-17
  • 2021-11-18
相关资源
最近更新 更多