Google apps script 仅将活动行从一个电子表格复制到另一个电子表格

Google apps script 仅将活动行从一个电子表格复制到另一个电子表格,google-apps-script,google-sheets,Google Apps Script,Google Sheets,我想创建一个脚本,将工作表(时间机器)的活动行复制到另一个Google电子表格(数据库)中。我还想将“1”发送到复制行的13行。如果有人能指引我,那就太好了。下面给出的代码只能在同一个电子表格中复制 function endTime() { transfer("1E3CWWohirN4DD_f_23WWBElYrhqnAs_27crrxowFjFA", "TIME MACHINE", "TIME MACHINE2") } function transfer(targetId, source

我想创建一个脚本,将工作表(时间机器)的活动行复制到另一个Google电子表格(数据库)中。我还想将“1”发送到复制行的13行。如果有人能指引我,那就太好了。下面给出的代码只能在同一个电子表格中复制

function endTime() {

transfer("1E3CWWohirN4DD_f_23WWBElYrhqnAs_27crrxowFjFA", "TIME MACHINE", "TIME MACHINE2")

}

function transfer(targetId, sourceSheetName, targetSheetName) {

var d = new Date();
var offset = -d.getTimezoneOffset()/60;
var h = d.getHours();
var h = h >= 13? h - 12: h;
h = h == 0? 12: h;
var m = m < 10? "0" + d.getMinutes(): d.getMinutes();
var s = d.getSeconds();
var ss = SpreadsheetApp.getActiveSpreadsheet();
var sourceSheet = ss.getSheetByName(sourceSheetName);
var last = sourceSheet.getActiveRange().getRow();
var data = sourceSheet.getRange(last, 1, 1, 14).getValues();
var time1 = h + ":" + m + ":" + s;

sourceSheet.getRange(last, 28).setValue(time1);


var tamma = sourceSheet.getRange(last, 11).getValue();

// copy data
var ss2 = SpreadsheetApp.openById(targetId);
var targetSheet = ss2.getSheetByName(targetSheetName);
//get last row
var lastRow = targetSheet.getLastRow();
//write data
targetSheet.getRange(lastRow + 1, 1, data.length, data[0].length).setValues(data);
//write "1" into column 13
targetSheet.getRange(lastRow + 1, 13, data.length, 1).setValue("1");
targetSheet.getRange(lastRow + 1, 11, data.length, 1).setValue(tamma);
}
函数结束时间(){
转让(“时间机器”、“时间机器2”)
}
函数传输(targetId、sourceSheetName、targetSheetName){
var d=新日期();
var offset=-d.getTimezoneOffset()/60;
var h=d.getHours();
var h=h>=13?h-12:h;
h=h==0?12:h;
var m=m<10?“0”+d.getMinutes():d.getMinutes();
var s=d.getSeconds();
var ss=SpreadsheetApp.getActiveSpreadsheet();
var sourceSheet=ss.getSheetByName(sourceSheetName);
var last=sourceSheet.getActiveRange().getRow();
var data=sourceSheet.getRange(last,1,1,14).getValues();
var time1=h+“:”+m+“:”+s;
sourceSheet.getRange(最后,28).setValue(time1);
var tamma=sourceSheet.getRange(最后一个,11.getValue();
//复制数据
var ss2=电子表格应用程序openById(targetId);
var targetSheet=ss2.getSheetByName(targetSheetName);
//最后一排
var lastRow=targetSheet.getLastRow();
//写入数据
targetSheet.getRange(lastRow+1,1,data.length,data[0].length).setValues(data);
//在第13栏写上“1”
targetSheet.getRange(lastRow+1,13,data.length,1).setValue(“1”);
targetSheet.getRange(lastRow+1,11,data.length,1).setValue(tamma);
}

您的代码只需要稍加重组,您需要从源代码表中获取正确的数据

这应该起作用:

function main() {

transfer("1mEluY-_K9oBvbxzASKn25YZ8BgF_naLl0XNitb4zIA8", "Sheet1", "Sheet1");

}
function transfer(targetId, sourceSheetName, targetSheetName) {
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var sourceSheet = ss.getSheetByName(sourceSheetName);
  var last = sourceSheet.getActiveRange().getRow();
  var data = sourceSheet.getRange(last, 1, 1, 14).getValues();

  // copy data
  var ss2 = SpreadsheetApp.openById(targetId);
  var targetSheet = ss2.getSheetByName(targetSheetName);
  //get last row
  var lastRow = targetSheet.getLastRow();
  //write data
  targetSheet.getRange(lastRow + 1, 1, data.length, data[0].length)
           .setValues(data);
  //write "1" into column 13
  targetSheet.getRange(lastRow + 1, 13, data.length, 1)
           .setValue("1")

}

你是说第13栏吗?哦,是的!你是对的。jvdh我尝试使用您以前的代码,但它给我错误。好的,对不起,我不知道您正在用这个for循环做什么,因为在开始时您递增I,然后递减它。这意味着i始终等于1。这就引出了一个问题,你想复制一行还是多行?好的,我已经编辑了我的问题,这可能会给你一个清晰的想法。我试图做的是只将活动行复制到其他工作表中。我认为不需要任何循环,但我不知道如何只将单个活动行复制到其他工作表中。您好jvdh,此代码给出错误“未找到范围”。可能是因为您没有插入任何参数。在代码中添加了一个主函数,以便您更容易看到。现在只需更改参数(电子表格键和工作表名称)。现在它让我“超过了最大堆栈深度”,知道jvdh我做错了什么吗。我在谷歌做了一点研究,发现这是由于递归,我引用谷歌:-“在递归过程中,谷歌应用程序脚本有一个小的限制。您只能调用1000个继承函数。如果您的脚本多次调用,您将得到错误:超过最大堆栈深度”。但是我认为我们的代码没有这样做。您的建议是什么。mh,它对我有效。您可以尝试再次复制粘贴我的代码吗?您只需更改main中转移调用的参数(即键和表名).我猜您的代码缺少一个关闭主函数的大括号。链接到我的电子表格1:和电子表格2: