0

私はこれを取得していません。同じ行のあるセルから別のセルに値をコピーしたいだけです。シンプルですよね?1 つのセルだけでなく、すべてのセル (右側) に値が入力されます。私はこれについて頭を悩ませましたが、何かを理解していないだけだと思います。

/* This gets the entire sheet (range) doesn't it? */
var range = SpreadsheetApp.getActiveSheet().getDataRange();
var rowRange ;
var status ;
var notes ;

var i=981;
var theEnd=979; 


  for (; i > theEnd; i--) {
     rowRange = range.offset(i, 0, 1); // Doesn't this specify one row (range) ?
     status = rowRange.offset(0, statusColumnOffset).getValue();  // one cell, right? 
     notes = rowRange.offset(0, notesColumnOffset).getValue();

    /* it gets the correct value for notes */
    if (notes == "No Number") {
// copy notes cell to status cell
/* I've tried both this (first attempt): */      
      //rowRange.offset(0, statusColumnOffset).setValue("No Number");

/* and this (second attempt):  */
      statusCell = rowRange.offset(0, statusColumnOffset);
      statusCell.setValue("No Number");
/* both give the same results */

    }

「rowRange.offset(0, statusColumnOffset).setValue("No Number");」を最初に試した理由がわかりません。それがしたことをしました。1つのセルの値をうまく取得します。では、なぜ同じコード (取得ではなく設定以外) で、各セルの値が設定された完全な行になるのでしょうか?? 2回目の試行で同じ(間違った)結果が得られる理由について、私は困惑しています。私が理解していないのは何ですか?

ありがとうございました

4

1 に答える 1

2
rowRange = range.offset(i, 0, 1); // Doesn't this specify one row (range) ?

はい、シートに入力された列の数と同じ幅の範囲です。したがって、この:

statusCell = rowRange.offset(0, statusColumnOffset);

同じくらい広くなります。私はあなたが使用する必要があると信じています:

statusCell = rowRange.offset(0, statusColumnOffset, 1, 1);

https://developers.google.com/apps-script/class_range#offset

オプションの numRows と numColumns が指定されていない場合、返されるオフセット範囲は初期範囲と同じサイズになります。それ以外の場合、返される Range はサイズ変更されます。

于 2012-11-17T09:18:35.833 に答える