2017-08-31 35 views
0

我正在開發一個「儀表板」[Sample Sheet Here],其中一些數據點是使用公式Column C(注意:公式未包含在樣本表中)自動計算的。每月將電子表格數據填充到下一列[腳本需要]

我想創建每月日誌Column C數據,其中元值被複制到下一個空白列的對應

我以前使用下面的腳本垂直記錄的變化,和可以用手重新調整我想要的結果。

function onEdit(event) { 
    var ss = SpreadsheetApp.getActiveSpreadsheet(); 

    var s = event.source.getActiveSheet(); 

    var r = event.source.getActiveRange(); 

    if(s.getName() == "Action Items" && r.getColumn() == 2 && r.getValue()) { 

    var row = r.getRow(); 

    var numColumns = s.getLastColumn(); 

    var targetSheet = ss.getSheetByName("Portion Tracking"); 

    if(targetSheet.getLastRow() == targetSheet.getMaxRows()) { 
     targetSheet.insertRowAfter(targetSheet.getLastRow()); 
    } 

    //Changes Start Here 
    var myRow = targetSheet.getLastRow()+1; 

    s.getRange(row, 1).copyTo(targetSheet.getRange(myRow,1)); 
    s.getRange(row, 2).copyTo(targetSheet.getRange(myRow,2)); 
    s.getRange(row, 3).copyTo(targetSheet.getRange(myRow,3)); 
    } 
} 

回答

0

AppendColumn()

我這個主意打得四處一次使用功能,我從here了一些我自己的雕刻。我有一個appendColumn()函數。

無論如何,它聽起來像你可能想要的東西。你可以看看它,同時我會看看你的代碼。

function appendColumn(columnA) 
{ 
    var ss=SpreadsheetApp.getActive(); 
    var sh=ss.getActiveSheet(); 
    var rg=sh.getDataRange(); 
    var vA=rg.getValues(); 
    var vB=transpose(vA); 
    sh.clear(); 
    sh.getRange(1,1,vB.length,vB[0].length).setValues(vB); 
    sh.appendRow(columnA); 
    vD=sh.getDataRange().getValues(); 
    sh.clear(); 
    vE=transpose(vD); 
    sh.getRange(1,1,vE.length,vE[0].length).setValues(vE);; 
} 

function transpose(a) 
{ 
    return Object.keys(a[0]).map(function (c) { return a.map(function (r) { return r[c]; }); }); 
} 

爲了測試它,我只是這樣稱呼它。

function testAppendColumn() 
{ 
    appendColumn(['',1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20]); 
} 

我想查看源數據。但假設它沒有改變,那麼我猜測這種技術將適用於你。

function onEdit(event) 
{ 
    var ss = event.source; 
    var s = event.source.getActiveSheet(); 
    var r = event.range; 
    if(s.getName() == "Action Items" && r.getColumn() == 2 && r.getValue()) 
    { 
    var row = r.getRow(); 
    var numColumns = s.getLastColumn(); 
    var targetSheet = ss.getSheetByName("Portion Tracking"); 
    if(targetSheet.getLastRow() == targetSheet.getMaxRows()) 
    { 
     targetSheet.insertRowAfter(targetSheet.getLastRow()); 
    } 
    //Changes Start Here 
    var myCol = targetSheet.getLastColumn()+1; 
    s.getRange(row, 1).copyTo(targetSheet.getRange(1,myCol)); 
    s.getRange(row, 2).copyTo(targetSheet.getRange(2,myCol)); 
    s.getRange(row, 3).copyTo(targetSheet.getRange(3,myCol)); 
    } 
} 

我不明白把這個連接到onEdit觸發器的邏輯,但我會假設你這樣做。

相關問題