Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/kotlin/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Google apps script GSheet将一张工作表中的一行复制到另一张工作表,该工作表包含同一行_Google Apps Script_Google Sheets_Copyto - Fatal编程技术网

Google apps script GSheet将一张工作表中的一行复制到另一张工作表,该工作表包含同一行

Google apps script GSheet将一张工作表中的一行复制到另一张工作表,该工作表包含同一行,google-apps-script,google-sheets,copyto,Google Apps Script,Google Sheets,Copyto,我有两张床单。一种是“主”表,其中包含“a”列中所有用户的列表。另一张是“测试”表,它只包含这些用户的一部分。我希望这样,如果有人更新了“测试”表中的用户行,那么它将在“主”表的“a”列中找到包含该用户名的行,并复制整行 更新:以下是我的代码: function onEdit(e) { const range = e.range; const exportSheet = range.getSheet(); if (exportSheet.getName() === "Gen

我有两张床单。一种是“主”表,其中包含“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,1,exportSheet.getLastColumn());
    const editedData = exportSheet.getRange(range.getRow(),3,1,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,3,sourceRow.getNumRows(),sourceRow.getNumColumns()); 
    editedData.copyTo(masterRow);
  }
}
  • 使用触发器,使用相应的。如果是这种情况,请执行以下操作:
  • 使用检索已编辑行的范围(以下示例中的变量
    sourceRow
  • 使用和从目标工作表(称为
    MSTR
    )检索所有值
  • test
    工作表中查找目标工作表中A列等于A列的行(即,用户相同)。你可以用它
  • 使用
    getRange
    检索与上一步中找到的行索引对应的范围
  • 使用将源行复制到目标行
代码示例: 编辑: 如果要更改范围的起始列,则必须修改中的第二个参数。因此,您应该检索没有A-B列的另一个源范围,并将该范围保存到修改后的
destRow
,方法如下:

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

您可以使用importRange和Vlookup公式来避免编写速度慢得多的脚本。查看我在J列中所做的操作,以引用从“主导入公式”工作表导入的数据,该工作表从另一个工作表导入数据。我这样做是因为母版似乎是另一个单独的文档。这是我目前拥有的代码:(因为我的帖子被删除了,我没有足够的字符发布在这里)如果我只想让它更新C列,然后呢?这样做的原因是,在其他工作表(即测试)上,我有一个查询,以便它将B列拉到测试工作表。因此,有了这个,它将继续更新A列。例如:=QUERY(MSTR!A2:B,“Select A,B Where B='Administrator')@mephobayt我编辑了我的答案,修改为只从C列开始复制。
const firstCol = 3;
const sourceRowToCopy = editedSheet.getRange(range.getRow(),firstCol,1,editedSheet.getLastColumn() - firstCol + 1);
const destRow = destSheet.getRange(destRowIndex,firstCol,sourceRowToCopy.getNumRows(),sourceRowToCopy.getNumColumns());
sourceRowToCopy.copyTo(destRow);