Google Sheets API
目次
-
- 3.1. API の有効化
- 3.2. サービスアカウントの作成
- 3.3. キーの作成
- 3.4. スプレッドシートの編集者にサービスアカウントを追加
-
- 4.1. Python の場合
- 4.2. C# の場合
はじめに
前提条件
- Google Cloud Platform(GCP)のアカウントを作成済みであること
- Google ドライブにスプレッドシートを作成済みであること
API を使用するための準備
1API の有効化
GCP のメニューから API とサービス
> ライブラリ
を選択します。
検索バーで「Google Sheets API」を検索し、これを有効にします(図1)。
2サービスアカウントの作成
GCP のメニューから IAM と管理
> サービスアカウント
に移動します。
「サービスアカウントを作成」をクリック(図2)し、アカウント名を入力して作成します。
3キーの作成
作成したサービスアカウントの「鍵」タブの キーを追加
> 新しい鍵を作成
をクリック(図3)し、キーのタイプとして JSON を選択してダウンロードします(図4)。JSON ファイルはプログラムからの API 呼び出しで使用します。この JSON ファイルには、API にアクセスするための認証情報が含まれているため、安全に保管してください。
4スプレッドシートの編集者にサービスアカウントを追加
次は Google ドライブ のスプレッドシートに 2. で作成したサービスアカウントを編集者として追加します。
右上の「共有」ボタンをクリックして、入力欄(図5)にサービスアカウントのメールアドレスを入力します。画面が切り替わる(図6)ので「編集者」が選択されていることを確認して「送信」ボタンをクリックします。
ここまでの手順で API を使用する準備が完了しました。
次では実際にプログラムから API を呼び出してみましょう。
プログラムから API 呼び出し
Python の場合
Google API を扱うためのライブラリをインストールします。
pip install google-api-python-client google-auth-httplib2 google-auth-oauthlib
ダウンロードした認証情報の JSON ファイルを py
ファイルと同じディレクトリに置きます。
ファイル名は sheet_credentials.json
としました。
import google.auth
import googleapiclient.discovery
CREDENTIALS_FILE = 'sheet_credentials.json'
SPREADSHEET_ID = '1DgV4pYzg19ZyRKEWlGuAFXt_CnsDNSsKnpG5doM9Rjk'
try:
# 認証情報のロード
credentials, _ = google.auth.load_credentials_from_file(
CREDENTIALS_FILE, ['https://www.googleapis.com/auth/spreadsheets']
)
# Google Sheets API サービスのビルド
service = googleapiclient.discovery.build('sheets', 'v4', credentials=credentials)
# 更新する値を設定
values = [['こんにちは、Python の世界!']]
body = {'values': values}
# API リクエストを実行
result = (
service.spreadsheets()
.values()
.update(
spreadsheetId=SPREADSHEET_ID,
range='シート1!A1',
valueInputOption='USER_ENTERED',
body=body,
)
.execute()
)
print(f'更新されたセルの数: {result.get("updatedCells")}')
except Exception as e:
print(f'エラーが発生しました: {e}')
SPREADSHEET_ID
スプレッドシートを開いた時のブラウザのアドレス欄から確認できます。 URL のd/
と/edit
の間に挟まれた文字列がスプレッドシート ID です。values
公式ドキュメント 1 にも記載がありますが、行列形式の2次元配列を設定します。
values = [
[
# Cell values ...
],
# Additional rows ...
]
プログラムを実行してみると値がセットされていることを確認できます(図7)。
図7 スプレッドシート
C# の場合
プロジェクトに Google.Apis.Sheets.v4
パッケージをインストールします。
dotnet add package Google.Apis.Sheets.v4
または
Install-Package Google.Apis.Sheets.v4
Python の場合と同様に、認証情報の JSON ファイルはアプリケーションの実行形式ファイルと同じディレクトリに置きます。ファイル名は sheet_credentials.json
です。
using Google.Apis.Auth.OAuth2;
using Google.Apis.Services;
using Google.Apis.Sheets.v4;
using Google.Apis.Sheets.v4.Data;
// スプレッドシートID
const string spreadsheetId = "1DgV4pYzg19ZyRKEWlGuAFXt_CnsDNSsKnpG5doM9Rjk";
try
{
// 認証情報のロード
using var stream = new FileStream("sheet_credentials.json", FileMode.Open, FileAccess.Read);
var credential = GoogleCredential.FromStream(stream).CreateScoped(SheetsService.Scope.Spreadsheets);
// SheetsService を作成
var service = new SheetsService(new BaseClientService.Initializer()
{
HttpClientInitializer = credential,
});
// 更新する値を作成
var values = new[] { new[] { "こんにちは、C# の世界!" } };
var valueRange = new ValueRange { Values = values };
// 更新リクエストを作成
var request = service.Spreadsheets.Values.Update(valueRange, spreadsheetId, "シート1!A1");
request.ValueInputOption = SpreadsheetsResource.ValuesResource.UpdateRequest.ValueInputOptionEnum.USERENTERED;
// リクエストを実行
var response = request.Execute();
Console.WriteLine($"更新されたセルの数: {response.UpdatedCells}");
}
catch (Exception ex)
{
Console.WriteLine($"エラーが発生しました: {ex.Message}");
}
実行結果は以下のようになりました(図8)。
トラブルシューティング
HttpStatusCode is Forbidden
以下のエラーメッセージが表示される場合は、スプレッドシートを編集する権限がないことを表しています。
The service sheets has thrown an exception. HttpStatusCode is Forbidden. The caller does not have permission
考えられる原因は以下です。
- スプレッドシートの編集者にサービスアカウントが追加されていない
- 違うサービスアカウントの認証情報ファイルを参照している
Unable to parse range
シート名の指定はスプレッドシートの実際のシート名に合わせる必要があります。
The service sheets has thrown an exception. HttpStatusCode is BadRequest. Unable to parse range: sheet1!A1
まとめ
Google Sheets API を利用することで、スプレッドシートをプログラムから更新する手順を解説しました。API を使用することで、手作業で行っていた業務フローを自動化したり、スプレッドシートをデータベースのように扱えるなど応用範囲が広がります。
API の詳細については参考資料をご覧ください。