【问题标题】:Script to copy data from one sheet to another based on criteria根据条件将数据从一张表复制到另一张表的脚本
【发布时间】:2018-05-01 16:28:15
【问题描述】:

我有一个名为主列表的谷歌电子表格。它包含两张表“响应”和“主响应”。响应表有大约 3000 行数据,“响应”表中的第一列称为“已响应?”。如果“已响应”,我想将“响应”表中的行复制到“主响应”表中?列中包含值“调用”,每次在“响应”表中输入新条目时,应将相应的数据行复制到“主响应”表中。我目前正在使用以下代码,但行从“响应”表中移动而不是复制。我想要一个脚本,其中行被复制到“主响应”表中,并且还应该保留在“响应”表上。 提前谢谢你。

function onEdit() 
{
var sheetNameToWatch = "Response";
var columnNumberToWatch = 1;
var valueToWatch = "Called";
var sheetNameToMoveTheRowTo = "Master Response";
var ss = SpreadsheetApp.getActiveSpreadsheet();
var sheet = ss.getActiveSheet();
var range = sheet.getActiveCell();
if (sheet.getName() == sheetNameToWatch && range.getColumn() == 
columnNumberToWatch && range.getValue() == valueToWatch)
{
var targetSheet = ss.getSheetByName(sheetNameToMoveTheRowTo);
var targetRange = targetSheet.getRange(targetSheet.getLastRow() + 1, 1); 
sheet.getRange(2, 1, sheet.getLastRow(), 
sheet.getLastColumn()).moveTo(targetRange);
}
}

【问题讨论】:

    标签: google-apps-script google-sheets


    【解决方案1】:

    您需要使用copyTo 而不是moveTo 将数据从一张表复制到另一张表。

    sheet.getRange(2, 1, sheet.getLastRow(),sheet.getLastColumn()).copyTo(targetRange);
    

    将其复制到不同的电子表格。

    var ss = SpreadsheetApp.openById("<<SPREADSHEET ID>>").getSheetByName("Sheet1");
    var newTargetRange = ss.getRange(ss.getLastRow() + 1, 1); 
    sheet.getRange(2, 1, sheet.getLastRow(),sheet.getLastColumn()).copyTo(newTargetRange);
    

    【讨论】:

    • 您好,谢谢您的回复。该代码在复制数据方面工作正常。但不是复制特定行,而是复制整个工作表。我不知道为什么会这样。
    • 更改范围根据....getRange(row, column, numRows, numColumns)...这里sheet.getLastRow()将给出最后一个数字
    • 非常感谢您的帮助。代码现在工作正常。是否可以修改代码以通过 id 将行复制到另一个工作表?我的意思是,现在我想将结果复制到同一工作簿的另一张工作表中,也复制到另一个工作簿中的一张工作表中。我尝试修改它但卡住了。
    • 我尝试使用您编辑的代码将行复制到另一个工作簿,但显示错误 [var sheet = ss.getActiveSheet();](找不到函数)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多