2012-05-17 54 views
0

我試圖從腳本擴展寫入數據到多個電子表格: 「教程:編寫使用JavaScript對象的電子表格數據」 https://developers.google.com/apps-script/articles/writing_spreadsheet_data谷歌電子表格腳本使用JavaScript

我已經實現了這個腳本到我們自己的電子表格並能夠閱讀我們的源電子表格並寫入目標電子表格。不幸的是,我已經達到了該教程的極限,這正好與我對JavaScript的知識程度恰好相吻合。

我們的目標: 1)我們不需要將數據寫入與教程中使用的「部門」相匹配的工作表,而是需要使用與部門匹配的一張表來寫入特定目標電子表格。 2)我們需要循環腳本來將每個部門寫入一個唯一的電子表格。

對於我們的目的,我們有大約100個「部門」,我們要查找的結果應該是100個電子表格 - 每個部門1個[就像教程中創建的工作表]腳本不需要動態創建一個新的電子表格,儘管這很酷......我們只需要將它寫入適當的電子表格即可。

任何幫助/建議或方向非常感謝。謝謝

回答

0

你需要存儲的地方是從部門名稱到電子表格ID的映射。這可以通過建立在你的主電子表格中的特殊紙包含映射來完成:

Department  Spreadsheet Id 
Sales   123 
HR    456 

當你準備寫出來的,你可以查找電子表格的ID爲給定部門的數據。您可以使用SpreadsheetApp.openById()打開電子表格並向其寫入數據。

+0

謝謝埃裏克。似乎有意義的是,您在製作腳本的電子表格上提供此映射列表。然後,我們打開源表單,並按部門提取數據,然後放在目標表單上......我想我需要有人來幫助我編寫這個表單...開始對我變得很有幫助。 – user1393960

0

所以我是新來的Javascript,谷歌牀單和本網站。但是我以爲我會分享一些你可能會感興趣的東西。這是我根據月份將數據從工作表移動到各種目標工作表中的腳本。

它通過逐一檢查targetSheetNames並查看一個數據位的月份值是否與數組中的工作表名稱的索引號相匹配。

所以在這個例子中,數組從0-11開始,這很方便,因爲Javascript中的月份也會變爲0-11。

出於您的目的,您可能需要添加更多的位,以檢查是否有正確的數據等。但是,它提供了在同一電子表格中將數據移動到多個工作表的示例。

function splitByMonth(){ 

    var targetSheetNames = ["Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"]; // Sheet names, in month order. Order is important. Name is not. Sheets must exist. This will not create them. 
    var sourceSheet = "Archive"; // Name of sheet with data in it. 
    var dateColumn = 1; // Column number with date in it. A = 1, B = 2, C = 3, etc 

    var ss, sheet, values, valuesLength, counter, archive = []; 


    for (var i = 0; i < targetSheetNames.length; i++){ 

ss = SpreadsheetApp.getActiveSpreadsheet(); 
sheet = ss.getSheetByName(sourceSheet); 
values = sheet.getDataRange().getValues(); 
valuesLength = values.length; 
counter = 1; // This starts at one because it assumes a header row. 
archive = []; 

    while (counter < values.length){ 


    var d = new Date(values[counter][dateColumn - 1]); 
    var m = d.getMonth(); 

    if (m == i ){ 

     archive.push(values.splice(counter, 1)[0]); 
    } 

    else 

    {  
     counter++; 
    } 

    } 

    var archiveLength = archive.length; 
    if (!archiveLength) {continue;} 
    var dataSs = SpreadsheetApp.getActiveSpreadsheet(); 
    var targetSheet = dataSs.getSheetByName(sourceSheetKeys[i]); 
    var lastRow = targetSheet.getLastRow(); 
    var requiredRows = lastRow + archiveLength - targetSheet.getMaxRows(); 
    if (requiredRows > 0) targetSheet.insertRowsAfter(lastRow, requiredRows); 
    targetSheet.getRange(lastRow + 1, 1, archiveLength, archive[0].length).setValues(archive); 
} 

} 
相關問題