每个链接下面的电子表格中有2张纸:
第一个被称为“事件/事件”,记录所有事件数据,包括投诉,表扬,事故和未遂事件。如果发生需要保险索赔的事件,用户将在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);
}
我真的很感谢这个帮助。
答案 0 :(得分:1)
我认为:
Events/Incidents
的工作表中。如果是这种情况,则可以使用onEdit trigger,然后在触发的函数中检查是否:
Insurance Claims
。Events/Incidents
)。要检查这些条件,我们需要知道哪些列,行和工作表已被编辑,我们可以通过使用event object获得该信息。
然后,如果满足这些条件,则需要检索相应行中的数据。之后,由于我们不希望复制原始行中的所有值,因此必须从相应的数组中删除其中一些值。方法splice可以用于此目的。最后,appendRow可用于将所选数据添加到true
。您的功能可能是这样的:
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
中。否则,只有其中之一会开火。
我希望这会有所帮助。