GSheets将一张纸中的一行复制到包含同一行的另一张纸中 代码示例:编辑:

问题描述

我有两张纸。一个是“主”表,其中包含“ A”列中所有用户的列表。另一个工作表是“测试”工作表,其中仅包含这些用户的一部分。我想要这样做,以便如果有人在“测试”表中更新了用户行,那么它将在“主”表的“ A”列中找到包含该用户名的行,并复制整行。

更新:这是对我有用的代码:

function onEdit(e) {
  const range = e.range;
  const exportSheet = range.getSheet();
  if (exportSheet.getName() === "Generals" || "Captains" || "Lieutenants" || "Moderators") {
    const sourceRow = exportSheet.getRange(range.getRow(),1,exportSheet.getLastColumn());
    const editedData = exportSheet.getRange(range.getRow(),3,exportSheet.getLastColumn());
    const masterSheet = e.source.getSheetByName("Master");
    const masterValues = masterSheet.getDataRange().getValues();
    const masterRowIndex = masterValues.findIndex(masterRow => masterRow[0] === sourceRow.getValues()[0][0]) + 1;
    const masterRow = masterSheet.getRange(masterRowIndex,sourceRow.getNumRows(),sourceRow.getNumColumns()); 
    editedData.copyTo(masterRow);
  }
}

解决方法

  • 使用onEdit触发器,使用相应的Event object检查已编辑工作表的名称为test。在这种情况下,请执行以下操作:
  • 使用Range.getRow()检索已编辑行的范围(以下示例中的变量sourceRow)。
  • 使用getDataRange()getValues()从目标工作表(称为MSTR)中检索所有值。
  • 在目标工作表中查找其A列等于test工作表中A列的行(即,用户相同)。您可以为此使用findIndex()
  • 使用getRange检索与上一步中找到的行索引相对应的范围。
  • 使用Range.copyTo(destination)将源行复制到目标行。

代码示例:

// Copyright 2020 Google LLC.
// SPDX-License-Identifier: Apache-2.0

function onEdit(e) {
  const sourceSheetName = "test";
  const destSheetName = "MSTR";
  const range = e.range;
  const editedSheet = range.getSheet();
  if (editedSheet.getName() === sourceSheetName) {
    const sourceRow = editedSheet.getRange(range.getRow(),1,editedSheet.getLastColumn());
    const destSheet = e.source.getSheetByName(destSheetName);
    const destValues = destSheet.getDataRange().getValues();
    const destRowIndex = destValues.findIndex(destRow => destRow[0] === sourceRow.getValues()[0][0]) + 1;
    const destRow = destSheet.getRange(destRowIndex,sourceRow.getNumRows(),sourceRow.getNumColumns()); 
    sourceRow.copyTo(destRow);
  }
}

编辑:

如果要更改范围的起始列,则必须从getRange(row,column,numRows,numColumns)修改第二个参数。因此,您应该按以下方式检索没有A-B列的另一个源范围,并将该范围更改为经过修改的destRow

const firstCol = 3;
const sourceRowToCopy = editedSheet.getRange(range.getRow(),firstCol,editedSheet.getLastColumn() - firstCol + 1);
const destRow = destSheet.getRange(destRowIndex,sourceRowToCopy.getNumRows(),sourceRowToCopy.getNumColumns());
sourceRowToCopy.copyTo(destRow);

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...