2013-04-16 127 views
1

在Google電子表格中,我想只取一個電子表格上的完整列表中的值,並將其附加到另一電子表格的列表底部。我的問題是,使用該功能copyValuesToRange()錯誤如下:在一個電子表格上覆制完整列表以附加到另一個電子表格的底部

Target sheet and source range must be on the same spreadsheet. 

這裏是我當前的代碼:

function transferList() { 
    var source = SpreadsheetApp.getActiveSpreadsheet(); 
    var target = SpreadsheetApp.openById("0ABCD"); 
    var target_sheet = target.getSheetByName("RFPData"); 
    var sheet = source.getSheetByName("RFP List"); 
    var sheet_last_row = sheet.getLastRow() + 1; 
    var source_range = sheet.getRange("A2:I"+sheet_last_row); 
    var sWidth=source_range.getWidth() + 1; 
    var sHeight=source_range.getHeight() + 1; 
    var last_row=target_sheet.getLastRow(); 
    source_range.copyValuesToRange(target_sheet , 1, sWidth, 
    last_row + 1, last_row + sHeight); 
} 

任何想法,我怎麼能得到這個工作?

回答

4

正如您看到的,copyValuesToRange()Range method影響一個Sheet Object是在同一個Spreadsheet Object的範圍。沒有一種原子方法會將一系列值複製到另一個電子表格中,但有很多方法可以做到這一點。

這裏有一種方法。

  • 從源片,得到所有的數據在一個操作中,通過使用getDataRange()選擇數據的完整範圍,然後抓住所有的值成一個JavaScript陣列getValues()
  • 要忽略標題的第一行,用javascript array method splice()
  • 找到你的目的地,這是目標表上,數據的最後一行是目前那裏,用getLastRow()後啓動。
  • 使用setValues()將源數據(不含標題)寫入從下一行開始的目標工作表。

腳本:

function transferList() { 
    var sourceSheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("RFP List"); 
    var sourceData = sourceSheet.getDataRange().getValues(); 
    sourceData.splice(0,1); // Remove header 
    var targetSS = SpreadsheetApp.openById("0ABCD").getSheetByName("RFPData"); 
    var targetRangeTop = targetSS.getLastRow(); // Get # rows currently in target 
    targetSS.getRange(targetRangeTop+1,1,sourceData.length,sourceData[0].length).setValues(sourceData); 
} 
+0

即功能正在傳送標題行,但沒有數據。 –

+0

良好的捕獲 - 我試圖鏈接拼接,這會產生*刪除*行而不是*餘數*。現在修復。 – Mogsdad

+0

玩得不錯,它實際上比我預期的要短得多。謝謝! –

0

對於我創建通過導入和附加數據的一些歷史悠久的儀表盤,我用一個附加的所謂Sheetgo。節省我編程時間並幫助我解決可追溯性問題。

相關問題