【问题标题】:Automatically copy and paste values from one google sheet to another自动将值从一个 Google 工作表复制并粘贴到另一个工作表
【发布时间】:2019-12-16 19:35:17
【问题描述】:

根据以下链接,我的电子表格中有 2 张工作表:

Database

第一个称为“事件/事件”,记录所有事件数据,包括投诉、赞美、事故和未遂事件。如果发生需要保险索赔的事件,用户将勾选 Y 列中的框,这将要求另一个用户提出索赔。因此,我创建了第二张题为“保险索赔”的表格。这就像保险索赔的甘特图时间表进度。

一旦初始用户勾选“事件/事件”的 Y 列中的框,我希望将相应行的多个单元格中的值复制并粘贴到“保险索赔表”中。

我仍在学习编写代码,所以我倾向于从其他 Stack Overflow 答案中挑选代码,但我正在努力解决这个问题。这是我目前的尝试,但我觉得我缺少该功能的关键部分。

//Data from Events/Incidents Sheet to Insurance Claims Sheet
function dataInsuranceClaimsSheet() {

  // setup spreadsheet and sheets
  var spreadsheet = SpreadsheetApp.getActiveSpreadsheet();
  var sourcesheetname = "Events/Incidents";
  var source = spreadsheet.getSheetByName(sourcesheetname);
  var targetsheetname = "Insurance Claims";
  var target = spreadsheet.getSheetByName(targetsheetname);
  var trigger = source.getRange(3, 1, 1, 25) //column Y of Events/Incidents sheet

  // get Form Response
  //Logger.log(JSON.stringify());
  var row = source.range.getRow();
  var range = source.getRange(row, 1, 1, 26);
  
  //Logger.log("DEBUG: The range is "+range.getA1Notation());  
  var values = range.getValues();  
  var sourceDate = values[0][1]
  var sourceId = values[0][2];
  var sourceBranch = values[0][3];
  var sourceEmployee = values[0][5]
  var sourceFleet = values[0][7];
  var sourceRoute = values[0][8];
  var sourceDescription = values[0][17]
  var targetDate = values[0][1]
  var targetId = values[0][2];
  var targetBranch = values[0][3];
  var targetEmployee = values[0][4]
  var targetFleet = values[0][5];
  var targetRoute = values[0][6];
  var targetDescription = values[0][7]  
     
     
   //update the Insurance Claims sheet
   var targetupdate = [];
   var targetfinal=[];

   // push the values to a blank array
   targetupdate.push(sourceDate); // Date
   targetupdate.push(sourceId); // ID
   targetupdate.push(sourceBranch);// Branch
   targetupdate.push(sourceEmployee); // Employee
   targetupdate.push(sourceFleet); // Fleet
   targetupdate.push(SourceRoute);// Route
   targetupdate.push(sourceDescription);// Description
     
   // if column Y of the Events/Incidents sheet = TRUE then copy the data from the Events/Incidents sheet and paste into the defined cells of the Insurance Claims sheet
   if (trigger == TRUE);
   targetfinal.push(targetupdate);

   // get Insurance Claims data
   var targetLR = target.getLastRow();
   var targetupdaterange = target.getRange(targetLR+1,1,1,8);
   Logger.log("DEBUG: The target range = "+targetupdaterange.getA1Notation());

   // update the form values to the Insurance Claims sheet
   targetupdaterange.setValues(targetfinal);

    }

我非常感谢您对此提供一些帮助。

【问题讨论】:

  • 工作表没有范围方法:var row = source.range.getRow(); 你的评论说// get Form Response。您指的是哪种表格?

标签: google-apps-script google-sheets


【解决方案1】:

我假设:

  • 您希望在工作表 Events/Incidents 的 Y 列的每个单元格中都有一个复选框。
  • 您希望每次选中其中一个复选框时,相应行中的数据都会附加到名为 Insurance Claims 的工作表中。

如果是这种情况,那么您可以使用 onEdit trigger 并在被触发的函数中检查是否:

  • 编辑的工作表是Events/Incidents
  • 编辑的列是 Y(索引 25)。
  • 编辑的行在 2 以上。
  • 复选框已选中 (true)。

要检查这些条件,我们需要知道编辑了哪些列、行和工作表,我们可以通过使用event object 获取这些信息。

然后,如果满足这些条件,则需要检索相应行的数据。之后,因为我们不希望原始行中的所有值都被复制,所以必须从相应的数组中删除其中的一些值。可以使用splice 方法。最后,appendRow 可用于将所选数据添加到Insurance Claims。你的函数可能是这样的:

function onEdit(e) {
  var range = e.range;
  var sheet = range.getSheet();
  var row = range.getRow();
  var column = range.getColumn();
  var sourcesheetname = "Events/Incidents";
  var checkbox = range.getValue();
  if (sheet.getName() == sourcesheetname && column == 25 && row > 2 && checkbox == true) {
    var targetsheetname = "Insurance Claims";
    var target = e.source.getSheetByName(targetsheetname);
    var numCols = sheet.getLastColumn();
    var values = sheet.getRange(row, 1, 1, numCols).getValues()[0];
    values.splice(17)
    values.splice(8, 8)
    values.splice(5, 1)
    values.splice(3, 1); // Removing undesired values
    var lastRow = target.getLastRow();
    var lastCol = target.getLastColumn();
    target.appendRow(values); // Append new row  
  }
}

请记住,如果您的代码中已有onEdit 触发器,则应将此代码添加到现有的onEdit。否则只有其中一个会开火。

希望对你有帮助。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-04-09
    • 1970-01-01
    • 2021-11-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多