簡體   English   中英

Google腳本:如何將范圍復制並粘貼到不為空的行中的新表中

[英]Google Script: How to copy and paste range to a new sheet on a row that is not empty

我正在嘗試將Sheet1 B4:E的范圍復制並粘貼到新的目標范圍,將Sheet 2 B4:E的范圍粘貼到空行,因為在Sheet2的 F列中也有一個公式。
我目前擁有的腳本僅會粘貼到下一個可用的空行,但是由於F列中有一個公式,它將腳本源范圍粘貼到Sheet2的最底部。 (因為腳本將F中的公式視為非空行)

有沒有一種方法可以復制范圍並將其粘貼到另一張紙上的特定范圍,同時又可以再次運行而不會覆蓋任何數據?
我編寫了2個腳本,如果我知道如何將它們“合並”在一起,它們便可以完成工作。

腳本1:將特定范圍復制並粘貼到目標工作表的下一個空白行,並且在重新運行腳本時不會覆蓋。

 Script 1: 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(ts.getLastRow()+1, 2, data.length, data[0].length).setValues(data); } 

腳本2 :將復制並粘貼到另一張紙上的特定范圍,但是每次我重新運行腳本時都會覆蓋。

 Script 2: function getdata() { //Copies source range to specific target range, but overwrites, rather than copy down into a new row. // // Target range - Copy var sourcess = SpreadsheetApp.openById("1GDMpcONdRR56QbZkA17EcvetWggltAMhzeddhNEEUG0"); var sourcesheet = sourcess.getSheetByName('Front Sheet'); var sourcerange = sourcesheet.getRange('B4:E'); var sourcevalues = sourcerange.getValues(); // Destination range - Paste var ss = SpreadsheetApp.getActiveSpreadsheet(); var destsheet = ss.getSheetByName('Printed POs'); var destrange = destsheet.getRange('B6:E'); destrange.setValues(sourcevalues); } 

而不是使用.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幫助我解決此問題的最終腳本:

 function transferArchive() { //TAB 1 //Target Range - Tab 1, Range 1 var sss = SpreadsheetApp.openById("1GDMpcONdRR56QbZkA17EcvetWggltAMhzeddhNEEUG0"); 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.openById("1GDMpcONdRR56QbZkA17EcvetWggltAMhzeddhNEEUG0") var ts = tss.getSheetByName('Printed POs'); ts.getRange(lastRow(ts, 2), 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; } 

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2025 STACKOOM.COM