Webアプリでスプレッドシートのデータを操る

プログラミング

Webアプリにスプレッドシートのデータを表示したい。Webアプリからのデータをスプレッドシートに書き込みたい。

Webアプリのデータベースとして、スプレッドシートを使用することができます。

GASを使用して、スプレッドシートと連携する方法をまとめました。

スプレッドシートと連携する2つのスクリプト

GASでスプレッドシートと連携するスクリプトには、2つの作り方があります。

  1. Container Bound Script:スプレッドシートなどのファイルに紐づいて存在
  2. Standalone Script:単独で存在

Container Bound Scriptの作成

Container Bound Scriptを作成するには、スプレッドシートを開き「ツール」→「スクリプトエディタ」をクリックします。

create-script

スクリプトエディタが開き、このスクリプトはスプレッドシートに紐づけられています。

Container Bound Scriptの場合、スクリプトのファイルはGoogleドライブに表示されません。

Standalone Scriptの作成

Standalone Scriptを作成するには、Googleドライブの「+新規」→「Google Apps Script」をクリックします。

アプリを追加

スプレッドシートの指定

GASでスプレッドシートと連携する場合は、どのスプレッドシートかを指定する必要があります。

Container Bound Scriptの場合は、スプレッドシートと紐づいているので以下のように指定します。

const spreadsheet = SpreadsheetApp.getActiveSheet();

次のように書くこともできます。どちらも同じです。

const spreadsheet = SpreadsheetApp.getActive();

Standalone Scriptの場合は、スプレッドシートと紐づいてないので、「ID」や「URL」で指定する必要があります。

spreadsheet-id

スプレッドシートのIDは、https://docs.google.com/spreadsheets/d/ここがID/edit#gid=0の「ここがID」という部分です。

const spreadsheet = SpreadsheetApp.openById("スプレッドシートのID");

URLで指定する場合は、次のように書きます。

const spreadsheet = SpreadsheetApp.openByUrl("スプレッドシートのURL");

Container Bound Scriptはスプレッドシートに紐づいているので、getActiveSpreadsheet()メソッドを使用することで、わざわざスプレッドシートのIDを指定する必要がありません。

シートを指定する

先ほど、GASでスプレッドシートを指定しました。

GASでスプレッドシートを操作するには、

  1. スプレッドシートを指定
  2. シートを指定
  3. セルを指定

という感じで、順番に指定していく必要があります。

次は、シートを指定しましょう。シートの名前で指定します。

//まずはスプレッドシートを指定
const spreadsheet = SpreadsheetApp.openById("スプレッドシートのID");

//次にシートを指定
const sheet = spreadsheet.getSheetByName("シートの名前");

シートは、左から何番目という指定の仕方も可能です。この場合、一番左のシートが[0]になることに注意してください。

//スプレッドシートを指定
const spreadsheet = SpreadsheetApp.openById("スプレッドシートのID");

//一番左のシートを指定
const sheet = spreadsheet.getSheets()[0];

セルを指定する

シートまで指定できたので、次はセルを指定します。

//まずはスプレッドシートを指定
const spreadsheet = SpreadsheetApp.openById("スプレッドシートのID");

//次にシートを指定
const sheet = spreadsheet.getSheetByName("シートの名前");

//次にセルを指定
const cell = sheet.getRange("A1");

getRange(“セル”)は、行番号と列番号でも指定ができます。

//スプレッドシートを指定
const spreadsheet = SpreadsheetApp.openById("スプレッドシートのID");

//シートを指定
const sheet = spreadsheet.getSheetByName("シートの名前");

//セルを指定 getRange(行番号,列番号)
const cell = sheet.getRange(1,1);

データを取得する

セルの指定までできました。セルのデータを取得してみましょう。連携するスプレッドシートは次のような入力があります。

spreadsheet-data

特定のセルの値を取得する

1つの値を取得する場合はgetValue()を使用します。

const getSheetValue = () => {
  const spreadsheet = SpreadsheetApp.openById("スプレッドシートのID");

  const sheet = spreadsheet.getSheetByName("シート1");

  const cell = sheet.getRange("C2");  
  //または const cell = sheet.getRange(2,3);

  const value = cell.getValue();
};

コードを実行すれば、変数valueにはC2のセルのC200が入ります。

複数のセルの値を取得する

複数のセルの値を取得するときは、getRange()で「”A1:D3”」のように範囲を指定し、getValues()を使用します。

getRange(1,1,3,4)のように指定することも可能です。getRange(行番号,列番号,行数,列数)となっています。

const getSheetValues = () => {
  const spreadsheet = SpreadsheetApp.openById("スプレッドシートのID");

  const sheet = spreadsheet.getSheetByName("シート1");

  const cell = sheet.getRange("A1:D3");  
  //または const cell = sheet.getRange(1,1,3,4);

  const values = cell.getValues();
};

変数のvaluesは、次のような2次元配列になります。

[
  [A100, B100, C100, D100],
  [A200, B200, C200, D200],
  [A300, B300, C300, D300]
]

この値を使うときは、values[0][0]だと”A100”、values[1][2]だと”C200”となります。

すべてのセルの値を取得するときは、getDataRange()を使うこともできます。

const getSheetValue = () => {
  const spreadsheet = SpreadsheetApp.openById("スプレッドシートのID");

  const sheet = spreadsheet.getSheetByName("シート1");

  const values = sheet.getDataRange().getValues();
};

データを書き込む

次は、スプレッドシートに値を書き込みます。

特定のセルに値を書き込む

セルに値を書き込むときはsetvalue()を使用します。

const setSheetValue = () => {
  const spreadsheet = SpreadsheetApp.openById("スプレッドシートのID");

  const sheet = spreadsheet.getSheetByName("シート2");

  const cell = sheet.getRange("B1");  
  //または const cell = sheet.getRange(1,2);

  cell.setValue("書き込み成功");
};

実行すれば、シート2のB1に「書き込み成功」と書き込まれます。

spreadsheet-input

複数のセルに値を書き込む

複数のセルに値を書き込むときは、getRange()で「”A1:D3”」のように範囲を指定し、setValues()を使用します。セルの範囲と書き込む配列の大きさが同じになるようにします。

const setSheetValues = () => {
  const spreadsheet = SpreadsheetApp.openById("スプレッドシートのID");

  const sheet = spreadsheet.getSheetByName("シート2");

  const cell = sheet.getRange("A1:C3");  
  //または const cell = sheet.getRange(1,1,3,3);

  //書き込む値
  const values = [
    ["A1","B1","C1"],
    ["A2","B2","C2"],
    ["A3","B3","C3"]
  ];
  cell.setValues(values);
};
spreadsheet-input2
タイトルとURLをコピーしました