Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/201.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
Javascript Google脚本:如何将范围复制并粘贴到非空行上的新工作表_Javascript_Google Sheets_Copy_Paste - Fatal编程技术网

Javascript Google脚本:如何将范围复制并粘贴到非空行上的新工作表

Javascript Google脚本:如何将范围复制并粘贴到非空行上的新工作表,javascript,google-sheets,copy,paste,Javascript,Google Sheets,Copy,Paste,我试图复制并粘贴一个范围,从Sheet1B4:E到一个新的目标范围,Sheet2B4:E到一个非空行,因为我在Sheet2的F列中还有一个公式 我当前使用的脚本将只粘贴到下一个可用的空行,但由于列F中有一个公式,它将粘贴源范围到Sheet2的最底部。(因为脚本将F中的公式视为非空行) 是否有一种方法可以复制一个区域并将其粘贴到另一张图纸上的特定区域,同时在重新运行时不会覆盖任何数据? 我已经写了两个脚本,如果我知道如何将它们“合并”在一起,就可以完成这项工作 脚本1:将特定范围复制并粘贴到目标工

我试图复制并粘贴一个范围,从Sheet1B4:E到一个新的目标范围,Sheet2B4:E到一个空行,因为我在Sheet2F列中还有一个公式
我当前使用的脚本将只粘贴到下一个可用的空行,但由于列F中有一个公式,它将粘贴源范围到Sheet2的最底部。(因为脚本将F中的公式视为非空行)

是否有一种方法可以复制一个区域并将其粘贴到另一张图纸上的特定区域,同时在重新运行时不会覆盖任何数据?
我已经写了两个脚本,如果我知道如何将它们“合并”在一起,就可以完成这项工作

脚本1:将特定范围复制并粘贴到目标工作表的下一个空行,并且在重新运行脚本时不会覆盖

脚本1:
函数transferArchive(){
//表1
//目标范围-表1,范围1
var sss=SpreadsheetApp.getActiveSpreadsheet();
var ss=sss.getSheetByName(“前页”);
var range=ss.getRange('B4:E');
var data=range.getValues();
//目的地范围-表1,范围1
var tss=SpreadsheetApp.getActiveSpreadsheet();
var ts=tss.getSheetByName(“打印位置”);
ts.getRange(ts.getLastRow()+1,2,data.length,data[0].length).setValues(data);
}

请尝试调用一个函数来计算列中的最后一个单元格,而不是使用.getLastRow(),然后看看是否有效。例如:

function transferArchive() {

//TAB 1
//Target Range - Tab 1, Range 1
var sss = SpreadsheetApp.getActiveSpreadsheet();
var ss = sss.getSheetByName('Front Sheet');
var range = ss.getRange('B4:E');
var data = range.getValues();

//Destination Range - Tab 1, Range 1
var tss = SpreadsheetApp.getActiveSpreadsheet();
var ts = tss.getSheetByName('Printed POs');
ts.getRange(lastRow(ts, 1), 2, data.length, data[0].length).setValues(data);
}

function lastRow(sheet, colNum) {
var v = sheet.getRange(1, colNum, sheet.getLastRow()).getValues(),
    l = v.length,
    r;
while (l > 0) {
    if (v[l] && v[l][0].toString().length > 0) {
        r = (l + 2);
        break;
    } else {
        l--;
    }
}
return r ? r : 1;

}

多亏了@JPV,我对他们的脚本做了一点小改动,现在效果很好

下面是帮助我回答这个问题的最后一个脚本@JPV

函数transferArchive(){
//表1
//目标范围-表1,范围1
var sss=SpreadsheetApp.openById(“1GDMPCondrr56QBZKA17ECVETWGGLtamHzeddHneug0”);
var ss=sss.getSheetByName(“前页”);
var range=ss.getRange('B4:E');
var data=range.getValues();
//目的地范围-表1,范围1
var tss=SpreadsheetApp.openById(“1GDMPCondrr56QBZKA17ECVETWGGLTAMHZEDDHNEUG0”)
var ts=tss.getSheetByName(“打印位置”);
ts.getRange(lastRow(ts,2),2,data.length,data[0].length).setValues(data);
}
函数lastRow(表,列){
var v=sheet.getRange(1,colNum,sheet.getLastRow()).getValues(),
l=v.长度,
R
而(l>0){
if(v[l]&&v[l][0].toString().length>0){
r=(l+2);
打破
}否则{
l--;
}
}
返回r;

}
Hi@JPV,谢谢你看这个!我已经运行了您的脚本,出现以下错误消息:“找不到方法getRange((class),number,number,number)”您有解决此错误消息的建议吗?再次感谢,可能目标表还是空的。查看是否将最后一行更改为返回r?r:1;解决了它(我更新了上面的代码帖子)。嗨,JPV,只是想让你知道,我还将getActivesheet更改为openById,并将lastRow(ts)的值更改为2而不是1。谢谢你的帮助