2016-10-27 8 views
0

ダイナミックレンジに基づいてPROPAGATEFORMULAE関数(以下のコードを参照)を実行しようとしています(つまり、私の行数と列数が変化している可能性が高い)。ダイナミックレンジに基づいて関数を呼び出す方法は?

私はこれを実行するたびにスクリプトを実行しますが(execution transcript参照)、PROPAGATEFORMULAE関数は呼び出されていないようです。私は何が間違っているのか分かりません。この関数は、STATICの値をその範囲に設定するたびに機能しますが、それらを動的に保ちたいと思います。

cols, currentSheet 

の場合:

function myFunction() { 

    var sh = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Looping columns"); 
    var lastrow = sh.getLastRow(); 
    var numrows = lastrow; 
    var lastcol = sh.getLastColumn(); 
    var numcols = lastcol; 
    var range = sh.getRange(1,1,numrows,numcols); 
    sh.setActiveRange(range); 

    return propagateFormulae(range); 

} 

function getCellFromSheet(row,col,sheet){ 
    return SpreadsheetApp.getActiveSpreadsheet().getSheets()[sheet].getRange(row,col); 
} 

function propagateFormulae(rows, cols, currentSheet){ 
    for(var i=1;i<=cols;i++){ 
    for(var j=2;j<=rows;j++){ 
     if(getCellFromSheet(j,i,currentSheet).getValue().length == 0) 
     getCellFromSheet(j-1,i,currentSheet).copyTo(getCellFromSheet(j,i,currentSheet)); 
     else{ 
     j=rows; 
    } 
    } 
    } 
    } 

enter image description here

答えて

0

私はこれを行うことができたし、それが働いた:

function myFunction() { 

    var sh = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Looping columns"); 
    var lastrow = sh.getLastRow(); 
    var numrows = lastrow; 
    var lastcol = sh.getLastColumn(); 
    var numcols = lastcol; 
    var range = sh.getRange(1,1,numrows,numcols); 
    sh.setActiveRange(range); 

    return propagateFormulae(numrows, numcols, sh); 

} 

function propagateFormulae(rows, cols){ 

    for(var i=1;i<=cols;i++){ 
    for(var j=2;j<=rows;j++){ 
     var sh = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Looping columns"); 
     if(sh.getRange(j,i).getValue().length == 0) 
     sh.getRange(j-1,i).copyTo(sh.getRange(j,i)); 
     else{ 
     j=rows; 
    } 
    } 
    } 
    } 
1

あなたが期待される機能2つの変数欠けている

return propagateFormulae(range); 

機能を

function propagateFormulae(rows, cols, currentSheet){ 

更新 範囲オブジェクトの場合機能を実行するために必要な変数は、関数内でオブジェクトの値を取得

return propagateFormulae(range); 

ようにあなたが必要と伝播してきた:

function propagateFormulae(range){//expected variable and object 

r=$this->range.rows; 
c=$this->range.cols; 
cs=$this->range.currentSheet; 

はないに必要なオブジェクトはすべての変数を送信します。

+0

をしかしRANGE変数がすでにrowsとcolsを定義しています。すでにRangeで定義されている行、列、シートを追加するのは余分でしょうか? –

+0

@ G.T。あなたが 'function propagateFormulae(rows、cols、currentSheet)'として関数を定義し、 'rows'、' cols'と 'currentSheet'の変数を送信するはずですが、まだ'範囲オブジェクト。つまり、あなたの関数は、 'cols'と' currentSheet'が何であるかをあなたの関数が知らないので、あなたの関数が 'rangeオブジェクト'、 'cols undefined'と' currentSheet as undefined'を持っていますが、 – Vytautas

関連する問題