Google apps script GSheet将一张工作表中的一行复制到另一张工作表,该工作表包含同一行
我有两张床单。一种是“主”表,其中包含“a”列中所有用户的列表。另一张是“测试”表,它只包含这些用户的一部分。我希望这样,如果有人更新了“测试”表中的用户行,那么它将在“主”表的“a”列中找到包含该用户名的行,并复制整行 更新:以下是我的代码: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
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
- 从
工作表中查找目标工作表中A列等于A列的行(即,用户相同)。你可以用它test
- 使用
检索与上一步中找到的行索引对应的范围getRange
- 使用将源行复制到目标行
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);