2016-12-22 68 views
0

如果可能的話,我會很感激我的第一個谷歌腳本的一些幫助。谷歌腳本 - 複製動態範圍到新​​的電子表格

我試圖通過複製並粘貼到日日誌電子表格的底部來存檔我們的日常處理日誌。

問題是,每天處理的行數會有所不同,因此我無法設置要複製到目標電子表格的固定行數。

我只是想從排B7複製下到最後一行輸入的值

function pasteprocessinglog() { 
 

 
    var sss = SpreadsheetApp.getActiveSpreadsheet(); 
 
    var ss = sss.getSheetByName('Sheet_name'); 
 
    var range = ss.getRange('B7:J'); 
 
    var data = range.getValues(); 
 

 
    var tss = SpreadsheetApp.openById('URL'); 
 
    var ts = tss.getSheetByName('Processing Log'); 
 
    ts.getRange(ts.getLastRow() + 1, 2, ss.getMaxRows(), 9).setValues(data); 
 
}

我目前收到的錯誤:不正確的範圍內的高度,是6467而應該是6473

我猜這是因爲它試圖複製過多的空行和電子表格不夠長。

任何幫助,將不勝感激:)

謝謝!

回答

0

在使用ss.getRange('B7:J')。getValues()檢索到的數據中,包含空單元格。所以檢索數據的長度大於實際數據的長度。 6467和6473分別表示數據數組的長度和getMaxRows()的值。

而getMaxRows()檢索包含空單元格的最底層單元格的數量。因此,在使用setValues()的情況下,可以通過將setValues的數據數組長度作爲getRange的numRows(https://developers.google.com/apps-script/reference/spreadsheet/sheet#getRange(Integer,Integer,Integer,Integer) )來複制數據。

腳本如下。

function pasteprocessinglog() { 
    var sss = SpreadsheetApp.getActiveSpreadsheet(); 
    var ss = sss.getSheetByName('Sheet_name'); 
    var firstrow = 7; // 7th row 
    var range = ss.getRange(firstrow, 2, ss.getLastRow() - firstrow + 1, 9); 
    var data = range.getValues(); 

    var tss = SpreadsheetApp.openById('URL'); 
    var ts = tss.getSheetByName('Processing Log'); 
    ts.getRange(ts.getLastRow() + 1, 2, data.length, 9).setValues(data); 
} 

如果我的理解有誤,我很抱歉。

+0

非常感謝!這似乎很好地工作。我很欣賞澄清我收到的錯誤以及解決方案:) – Hoodwolf

+0

謝謝。 – Tanaike

相關問題