私はここで新しく(2番目の投稿)、Google Apps Scriptでも新しくなりました。
Google Apps Scriptを使用して、スプレッドシートの1つの範囲にデータを書き込む方法を探しています。
セクションのGoogleヘルプのように見えます Writing data では十分ではありません
たとえば、セルB5にテキストを書き込む方法など、初心者に説明します。
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
のデータを含むスプレッドシートがありますが、更新するのはD7
とG6
の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番目の列である列D
は3
になり、したがってvalues[6][3]
になります。同様に、G6
はvalues[5][6]
になります。
最後に、配列を範囲に書き戻します。スプレッドシート関数呼び出しの数を少なく保ちながら、配列内の好きな数の値を更新できます。単一のgetValues
と単一のsetValues
のみです。
コメントから、スプレッドシートからpure関数をどのように使用できるかについて言及する価値があるでしょう。純粋な関数とは、副作用のない関数です。つまり、戻り値は引数のみに依存します。
=functionName
を使用して、スプレッドシートから純粋な関数を呼び出すことができます。関数が入力値に2を乗算し、その結果を返すとします。スクリプトエディターでこれを入力します。
function multiplyByTwo(num) {
return num * 2;
}
スプレッドシートで、セルA2
に式=multiplyByTwo(4)
を入力するとします。 A2
は8
を表示します。
他のセルを引数として使用することもできます。数式を=multiplyByTwo(B2)
に変更し、セルB2
に数値6
を入力します。セルA2
は12
を表示します。
Here は純粋な関数の別の例であり、 Googleのドキュメントのカスタム関数 の詳細をお読みください。
多次元配列を返すこともできます。その場合、結果はスプレッドシートの複数の行/列にまたがります。関数
function multiplyByTwoAndFour(num) {
return [[num * 2], [num * 4]];
}
セルD2
で=multiplyByTwoAndFour(3)
として使用できます。これにより、D2
が6
を表示し、D3
が12
を表示します。
私はこの小さな関数を作成しましたが、これは非常に便利で、データを範囲に入れるのが簡単になります。
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")
あなたはおそらく関数のより良い名前を考え出すことができます