2016-09-01 30 views
0

私は多くの同様の質問を読んでいますが、私のコードはまだ動作しません。これは達成したいことのわずかな違いによるものだと思います:Googleスプレッドシートスクリプト - アクティブな選択肢の行を繰り返しますが、すべての列

現在選択されているセルに対応する行に対して繰り返しを実行したい(セル自体は気にしない、行については気にしない)。私はまた、現在の選択範囲の外にあるが、同じ行にあるセルに到達する必要があります。

Egが、私はA2を選択したとします。私のスプレッドシートのA3、その後、私は行2と3の上だし、

E2 = A2 + B2 + C2 * D2 
E3 = A3 + B3 + C3 * D3 

のような操作を実行するこれまでのところ、私はこのような何かをしようとしていた「認識」したいです実際に私はスクリプト自体は良好であると考えているが、私はそれを活性化させる方法は多分問題です:

私は新しいメニュー項目を生成する「MyFuが、

function myfunction(){ 
    var range = sheet.getActiveRange() 
    var firstRow = range.getRow() 
    var numRows = range.getNumRows(); 

    for (var i = 0; i < numRows; i++) { 
    var absoluteRow = firstRow + i 

NOTEを動作するようには思えませんこのメニュー項目に関数をアタッチしましたが、activeRangeを正しく渡していますか?

SpreadsheetApp.getUi() 
    .createMenu("MyMenu") 
    .addItem("MyFunction","myFunction") 
    .addToUi() 

答えて

0

このコードは、私のために適切に

var sheet = SpreadsheetApp.getActiveSpreadsheet(); 
    var range = sheet.getActiveRange() 
    var firstRow = range.getRow() 
    var numRows = range.getNumRows(); 
    Logger.log("firstRow "+firstRow); 
    Logger.log("numRows "+numRows); 

    for (var i = 0; i < numRows; i++) { 
    var absoluteRow = firstRow + i; 
    Logger.log("absoluteRow "+absoluteRow); 
    } 

結果作品:

[16-09-01 13:44:44:762 EEST] firstRow 2 
[16-09-01 13:44:44:763 EEST] numRows 5 
[16-09-01 13:44:44:764 EEST] absoluteRow 2 
[16-09-01 13:44:44:764 EEST] absoluteRow 3 
[16-09-01 13:44:44:765 EEST] absoluteRow 4 
[16-09-01 13:44:44:765 EEST] absoluteRow 5 
[16-09-01 13:44:44:766 EEST] absoluteRow 6 

を使用すると、スクリプトエディタから起動するときに、適切な結果を受け取るかどうかを確認してください。

+0

はい、明らかに私の問題はスプレッドシートの選択についてでした。私はスクリプトを特定のスプレッドシートに対してのみ動作させたいので、そのIDでスプレッドシートを選択しましたが、すべての "アクティブ"の動作を失っていました。range.getRow()は常に1を返していましたスプレッドシートのIDはアクティブスプレッドシートと同じです)。 'SpreadsheetApp.getActiveSpreadsheet()'では、うまくいきました。 –

関連する問題