2017-08-31 30 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触发器的逻辑,但我会假设你这样做。

相关问题