2015-11-26 34 views
0

我有多個項目將日常數據輸出到他們自己的Google電子表格。我想製作一張捕獲這些數據的主表。使用導入範圍很容易,但當導入大量數據時,電子表格變得非常慢,所以我希望使用腳本來複制和粘貼數據。將來自多個Google表格的數據合併到一個使用腳本的數組中

我知道該怎麼做設置腳本使用來自另一個帖子下面的代碼手動:

var sourceSpreadsheetID = "ID HERE"; 
var sourceWorksheetName = "SHEET NAME HERE"; 
var destinationSpreadsheetID = "ID HERE"; 
var destinationWorksheetName = "SHEET NAME HERE"; 

function importData() { 
    var thisSpreadsheet = SpreadsheetApp.openById(sourceSpreadsheetID); 
    var thisWorksheet = thisSpreadsheet.getSheetByName(sourceWorksheetName); 
    var thisData = thisWorksheet.getDataRange(); 
    var toSpreadsheet = SpreadsheetApp.openById(destinationSpreadsheetID); 
    var toWorksheet = toSpreadsheet.getSheetByName(destinationWorksheetName); 
    var toRange = toWorksheet.getRange(1, 1, thisData.getNumRows(), thisData.getNumColumns()) 
    toRange.setValues(thisData.getValues()); 

}

但理想情況下,我想使列表易於使用數組擴大。我已經建立了一個「導入」表(見下圖),所以我猜想通過它的for循環可以讓我做到這一點,但我不知道如何。

Image of table

我真的很感激你們可以提供任何幫助。謝謝!

回答

0

要回答我的問題,我已經成功地湊齊下面,它似乎工作:

function importData() { 
    var ss = SpreadsheetApp.getActiveSpreadsheet(); 
    var keysSheet = ss.getSheetByName("Keys") 
    var targetSheet = ss.getSheetByName("Test") 
    var keys = keysSheet.getRange("B2:B50").getValues(); 
    var sheets = keysSheet.getRange("C2:C50").getValues(); 
    var ranges = keysSheet.getRange("D2:D50").getValues(); 
    var row, startcolumn = 1; 

    for (row = 1; row < 50; row++) { 

    if (keys[row-1] != '' && sheets[row-1] != '' && ranges[row-1] != '') { 
     var sourceSpreadsheetID = keys[row-1]; 
     var sourceWorksheetName = sheets[row-1]; 
     var sourceDataRange = ranges[row-1]; 
     var thisSpreadsheet = SpreadsheetApp.openById(sourceSpreadsheetID); 
     var thisWorksheet = thisSpreadsheet.getSheetByName(sourceWorksheetName); 
     var thisData = thisWorksheet.getRange(sourceDataRange); 

     var toRange = targetSheet.getRange(1, startcolumn, thisData.getNumRows(), thisData.getNumColumns()); 
     toRange.setValues(thisData.getValues()); 
     startcolumn = startcolumn + thisData.getNumColumns(); 
    } 
    } 
} 

我相信,這可以更有效地利用陣列來完成,while循環(而比一個for循環),和一個鍵表的範圍,根據其大小自動更新,但我無法弄清楚如何做到這一點與我的高中編碼技能。

希望迄今爲止我所知道的將幫助別人!

相關問題