web-dev-qa-db-ja.com

Google Apps Scriptで単一の範囲にデータを書き込むにはどうすればよいですか?

私はここで新しく(2番目の投稿)、Google Apps Scriptでも新しくなりました。

Google Apps Scriptを使用して、スプレッドシートの1つの範囲にデータを書き込む方法を探しています

セクションのGoogleヘルプのように見えます Writing data では十分ではありません

たとえば、セルB5にテキストを書き込む方法など、初心者に説明します。

5
Shirley Temple

getRange 関数を使用して、範囲への参照を取得することから始めます。それができたら、この範囲は単一のセルで構成されているため、 setValue 関数を使用できます。

var range = SpreadsheetApp.getActiveSpreadsheet().getRange("B5");
range.setValue("TEXT");

... TEXTをセルB5に書き込みます。

複数のセル範囲(より一般的)があり、すべてのセルに同じ値を書きたくない場合は、 setValues 関数を使用する必要があります(複数形に注意してください) )、配列のarray[[]])を引数として受け取ります:

var range = SpreadsheetApp.getActiveSpreadsheet().getRange("B5:C5");
range.setValues([ ["This is column B", "This is column C"] ]);

この場合、同じ行に2つのセルがあるので、外側の配列には単一の要素があります。内側の配列には、各セルに1つずつ、2つの要素があります。

複数の行にまたがる範囲に書き込みたい次の例と比較してください。

var range = SpreadsheetApp.getActiveSpreadsheet().getRange("B5:B7");
range.setValues([ ["This is row 5"], ["This is row 6"], ["This is row 7"] ]);

最後に、複数列、複数行の範囲に書き込みましょう。

var range = SpreadsheetApp.getActiveSpreadsheet().getRange("B5:C7");
range.setValues([ ["This is B5", "This is C5"], ["This is B6", "This is C6"], ["This is B7", "This is C7"] ]);

サンプルスプレッドシート を作成して、これらのスニペットのデモを行いました。お気軽にコピーしてください。


スプレッドシートのデータを直接取得または操作する関数は、関連するデータの量に関係なく、速度が遅いことに注意してください。したがって、スプレッドシート関数呼び出しの数を少なくしてください。複数のセルを更新する場合は、通常、最初に値の配列全体をフェッチしてから、変更する値を更新し、配列全体を書き戻すことをお勧めします。

この例では、A1からH8のデータを含むスプレッドシートがありますが、更新するのはD7G6の2つのセルのみです。残りのセルは変更しないでください。

var range = SpreadsheetApp.getActiveSpreadsheet().getRange("A1:H8");
var values = range.getValues();
values[6][3] = "This is D7";
values[5][6] = "This is G6";
range.setValues(values);

range.getValues() を使用して既存の値の配列を取得する方法に注意してください。次に、その配列に個々の値を設定します。 JavaScriptの配列インデックスは0ベースであるため、行7は6になり、4番目の列である列D3になり、したがってvalues[6][3]になります。同様に、G6values[5][6]になります。

最後に、配列を範囲に書き戻します。スプレッドシート関数呼び出しの数を少なく保ちながら、配列内の好きな数の値を更新できます。単一のgetValuesと単一のsetValuesのみです。


コメントから、スプレッドシートからpure関数をどのように使用できるかについて言及する価値があるでしょう。純粋な関数とは、副作用のない関数です。つまり、戻り値は引数のみに依存します。

=functionNameを使用して、スプレッドシートから純粋な関数を呼び出すことができます。関数が入力値に2を乗算し、その結果を返すとします。スクリプトエディターでこれを入力します。

function multiplyByTwo(num) {
   return num * 2;
}

スプレッドシートで、セルA2に式=multiplyByTwo(4)を入力するとします。 A28を表示します。
他のセルを引数として使用することもできます。数式を=multiplyByTwo(B2)に変更し、セルB2に数値6を入力します。セルA212を表示します。
Here は純粋な関数の別の例であり、 Googleのドキュメントのカスタム関数 の詳細をお読みください。

多次元配列を返すこともできます。その場合、結果はスプレッドシートの複数の行/列にまたがります。関数

function multiplyByTwoAndFour(num) {
    return [[num * 2], [num * 4]];
}

セルD2=multiplyByTwoAndFour(3)として使用できます。これにより、D26を表示し、D312を表示します。

7
Vidar S. Ramdal

私はこの小さな関数を作成しましたが、これは非常に便利で、データを範囲に入れるのが簡単になります。

function sheetSetRange(data_array,range_addr) {
   data_range = SpreadsheetApp.getActiveSpreadsheet().getRange(range_addr)  
   data_range.setValues(data_array) 
}

.gsファイルにそれがある場合、次のようにできます。

g21からS21までの13セルの値を設定するには

sheetSetRange([["z","y","y","y","y","y","y","y","y","y","y","y","z"]],"G21:S21")

b2、B3、C2、C3の4つのセルの値を1,2 3,4に設定するには

sheetSetRange([[1,2][3,4]],"B2:C3")

あなたはおそらく関数のより良い名前を考え出すことができます

0
John Doe