Google Sheets API V4を使用してJavaでスプレットシートを操作する方法を
ご紹介します。
APIの呼び出しは、Googleのサービスアカウントを作成して実行します。
Google Sheets APIとは
Googleが提供しているAPIで、スプレットシートを操作することを目的としています。
無料で使用できます。
1分単位の制限をクリアしていれば1日の使用量の制限もありません。
読み取り・書き込みリクエスト制限
・プロジェクトごと、300回/分
・プロジェクトごと、ユーザーごと、60回/分
1. Google Sheets APIを使用するための準備
設定は下記から行います。
⧉Google クラウド プラットフォーム
1.1. プロジェクトの作成
No | 手順 | |
---|---|---|
1 | 「プロジェクトの選択」 -> 「新しいプロジェクト」を選択します。 | |
2 | 「プロジェクト名」 に作成するプロジェクト名を入力し、「作成」ボタンを押します。 |
1.2. Google Sheets APIの設定
Google Sheets APIを使えるようにします。
No | 手順 | |
---|---|---|
1 | メニューの 「APIとサービス」 -> 「ライブラリ」 を選択します。 | |
2 | Sheetsと入力して「Google Sheets API」を検索します。 | |
3 | 「Google Sheets API」が検索されますので、これを選択します。 | |
4 | 「有効にする」ボタンを押して「Google Sheets API」を使用可能にします。 |
1.3. Googleサービスアカウントの作成
プログラムに使用するGoogleサービスアカウントのJSONファイルをダウンロードします。
このようなjsonファイルがダウンロードされます。
このjsonファイルを使用してプログラムを実行します。
{
"type": "service_account",
"project_id": "astute-tractor-400101",
"private_key_id": "xxxxxxxxxxxxxxxxxxxxx",
"private_key": "-----BEGIN PRIVATE KEY-----\nxxxxxxxxxxxxxxxxxxxxx\n-----END PRIVATE KEY-----\n",
"client_email": "googlesheets-test@astute-tractor-400101.iam.gserviceaccount.com",
"client_id": "xxxxxxxxxxxxxxxxxxxxx",
"auth_uri": "https://accounts.google.com/o/oauth2/auth",
"token_uri": "https://oauth2.googleapis.com/token",
"auth_provider_x509_cert_url": "https://www.googleapis.com/oauth2/v1/certs",
"client_x509_cert_url": "https://www.googleapis.com/robot/v1/metadata/x509/googlesheets-test%40astute-tractor-400101.iam.gserviceaccount.com",
"universe_domain": "googleapis.com"
}
1.4. 操作するスプレットシートに権限追加
Google Sheets APIで操作したいシートに権限を追加します。
No | 手順 | |
---|---|---|
1 | シートを開いて、「ファイル」 -> 「共有」 -> 「他のユーザーと共有」を選択します。 | |
2 | サービスアカウントのメールアドレスを入力して、「共有」ボタンを押します。 |
操作するスプレットシートのURLからスプレットシートIDとシートIDを控えます。
シートIDは、URLパラメータのgidになります。
https://docs.google.com/spreadsheets/d/1pRpwe32zA8zze2xshY4rWt4ndk7lJ7OsxZQXEsSgyrw/edit#gid=0
スプレットシートID:1pRpwe32zA8zze2xshY4rWt4ndk7lJ7OsxZQXEsSgyrw
シートID:0
2. Spreadsheetsインスタンスの取得
2.1. googleライブラリの読み込み
Google Sheets APIを使用するためにライブラリのパスを設定します。
私の環境はpom.xmlで下記を指定しています。
Javaのバージョンは21を使用しています。
<!-- https://mvnrepository.com/artifact/com.google.api-client/google-api-client -->
<dependency>
<groupId>com.google.api-client</groupId>
<artifactId>google-api-client</artifactId>
<version>1.25.0</version>
</dependency>
<!-- https://mvnrepository.com/artifact/com.google.oauth-client/google-oauth-client-jetty -->
<dependency>
<groupId>com.google.oauth-client</groupId>
<artifactId>google-oauth-client-jetty</artifactId>
<version>1.34.1</version>
</dependency>
<!-- https://mvnrepository.com/artifact/com.google.apis/google-api-services-sheets -->
<dependency>
<groupId>com.google.apis</groupId>
<artifactId>google-api-services-sheets</artifactId>
<version>v4-rev20230815-2.0.0</version>
</dependency>
<!-- https://mvnrepository.com/artifact/com.google.apis/google-api-services-drive -->
<dependency>
<groupId>com.google.apis</groupId>
<artifactId>google-api-services-drive</artifactId>
<version>v3-rev197-1.25.0</version>
</dependency>
<!-- https://mvnrepository.com/artifact/com.google.auth/google-auth-library-oauth2-http -->
<dependency>
<groupId>com.google.auth</groupId>
<artifactId>google-auth-library-oauth2-http</artifactId>
<version>1.20.0</version>
</dependency>
2.2. Sheetsインスタンスの取得
スプレットシートを操作するためのSheetsインスタンスを取得します。
ファイルパスには、1.3. Googleサービスアカウントの作成
でダウンロードしたJSONファイルのパスを指定してください。
public static Spreadsheets getSpreadsheets() throws IOException, GeneralSecurityException {
InputStream input = new FileInputStream("/** サービスアカウントキーのファイルパス */");
GoogleCredentials credential = ServiceAccountCredentials.fromStream(input).createScoped(Arrays.asList(SheetsScopes.SPREADSHEETS));
HttpTransport transport = GoogleNetHttpTransport.newTrustedTransport();
JsonFactory jsonFactory = GsonFactory.getDefaultInstance();
HttpRequestInitializer httpRequestInitializer = new HttpCredentialsAdapter(credential);
Sheets service = new Sheets.Builder(transport,jsonFactory,httpRequestInitializer).build();
return service.spreadsheets();
}
3. スプレットシートの操作
3.1. スプレットシート情報の取得
スプレットシート内のさまざまな情報が取得できます。
取得したいスプレットシートのIDとシート名、範囲、内容を指定することで
スプレットシートの情報を取得します。
試しに、1.4. 操作するスプレットシートに権限追加
で権限を追加したスプレットシートの情報を取得してみます。
public static void main(String[] args) throws IOException, GeneralSecurityException {
//操作するスプレットシートのID
String fileId = "1pRpwe32zA8zze2xshY4rWt4ndk7lJ7OsxZQXEsSgyrw";
Spreadsheets sheet = getSpreadsheets();
com.google.api.services.sheets.v4.model.Spreadsheet info =
sheet.get(fileId) //取得するスプレットシートID
.setRanges(Arrays.asList(new String[] {"シート1"})) //取得するシート名とシート範囲
.setFields("*") //取得するField
.execute(); //実行する
System.out.println(info);
}
実行すると、スプレットシートの情報がまるっと取れました。
{"properties":{"autoRecalc":"ON_CHANGE","defaultFormat":{"backgroundColor":{"blue":1.0,"green":1.0,"red":1.0},"backgroundColorStyle":{"rgbColor":{"blue":1.0,"green":1.0,"red":1.0}},"padding":{"bottom":2,"left":3,"right":3,"top":2},"textFormat":{"bold":false,"fontFamily":"arial,sans,sans-serif","fontSize":10,"foregroundColor":{},"foregroundColorStyle":{"rgbColor":{}},"italic":false,"strikethrough":false,"underline":false},"verticalAlignment":"BOTTOM","wrapStrategy":"OVERFLOW_CELL"},"locale":"ja_JP","spreadsheetTheme":{"primaryFontFamily":"Arial","themeColors":[{"color":{"rgbColor":{}},"colorType":"TEXT"},{"color":{"rgbColor":{"blue":1.0,"green":1.0,"red":1.0}},"colorType":"BACKGROUND"},{"color":{"rgbColor":{"blue":0.95686275,"green":0.52156866,"red":0.25882354}},"colorType":"ACCENT1"},{"color":{"rgbColor":{"blue":0.20784314,"green":0.2627451,"red":0.91764706}},"colorType":"ACCENT2"},{"color":{"rgbColor":{"blue":0.015686275,"green":0.7372549,"red":0.9843137}},"colorType":"ACCENT3"},{"color":{"rgbColor":{"blue":0.3254902,"green":0.65882355,"red":0.20392157}},"colorType":"ACCENT4"},{"color":{"rgbColor":{"blue":0.003921569,"green":0.42745098,"red":1.0}},"colorType":"ACCENT5"},{"color":{"rgbColor":{"blue":0.7764706,"green":0.7411765,"red":0.27450982}},"colorType":"ACCENT6"},{"color":{"rgbColor":{"blue":0.8,"green":0.33333334,"red":0.06666667}},"colorType":"LINK"}]},"timeZone":"Asia/Tokyo","title":"Test"},"sheets":[{"properties":{"gridProperties":{"columnCount":26,"rowCount":1000},"index":0,"sheetId":0,"sheetType":"GRID","title":"シート1"}}],"spreadsheetId":"1pRpwe32zA8zze2xshY4rWt4ndk7lJ7OsxZQXEsSgyrw","spreadsheetUrl":"https://docs.google.com/spreadsheets/d/1pRpwe32zA8zze2xshY4rWt4ndk7lJ7OsxZQXEsSgyrw/edit"}
取得できる情報の詳細は、
⧉[Google Sheets API] Javaでスプレットシートの情報を取得する
の記事を参照ください。
3.2. スプレットシートのコピー
スプレットシートのシートをコピーします。
コピーは、SheetsOperationsのcopyTo()メソッドで実行します。
SheetsOperations operation = getSpreadsheets().sheets();
operation.copyTo()
詳細な内容は
⧉[Google Sheets API] スプレットシートのシートを別のスプレットシートにコピーする
の記事を参照ください。
3.3. スプレットシートの操作
操作したいリクエストを追加してbachUpdateを実行します。
操作したいリクエストは複数指定できます。
Google Sheets APIは1分間の実行回数に上限がありますので、
1つのシートに対して複数の操作がしたい場合は1度に送信することをお勧めします。
public static void main(String[] args) throws IOException, GeneralSecurityException {
String fileId = "ファイルID"; //操作するスプレットシートのID
int sheetId = 0; //操作するシートのID
List<Request> requests = new ArrayList<>();
requests.add(/** ここに操作したいリクエストを追加 */);
BatchUpdateSpreadsheetRequest body = new BatchUpdateSpreadsheetRequest().setRequests(requests);
Spreadsheets sheets = getSpreadsheets(); //Sheetsインスタンスの取得
BatchUpdateSpreadsheetResponse update = sheets.batchUpdate(fileId, body).execute();
List<Response> responses = update.getReplies();
for(Response response : responses) {
//例
AddProtectedRangeResponse res = response.getAddProtectedRange();
res.getProtectedRange().getProtectedRangeId();
}
}
スプレットシートのメニューとGoogle Sheets APIを関連付けた記事を書きました。
下記の記事にまとめましたので、APIでやりたい事を探してみてください。
⧉[Google Sheets API] JavaでスプレットシートのメニューとAPIを関連づけてみた
おしまい。。