C#でGoogleスプレッドシートのデータを取得するにはどうすればいいでしょうか? ここではGoogle Sheets API を使います。
Google APIを利用するには
Google API コンソールにアクセスします。
ログインしましょう。
ログインしたら[続行]を選択
認証情報に進みましょう。
次はなにもしないで下までスクロールして[キャンセル]を選択。
ここでは「認証情報を作成」をクリック
「OAuth クライアント ID」を選択
左のOAuth同意画面を選択
ここは「外部」を選択して「作成」をクリック。
入力必須の部分だけ入力します。
アプリ名 スプレッドシートの実験用
ユーザーサポートメール(自分のG-mailアドレス)
アプリのドメインは今回は実験なので空欄でかまいません。
デベロッパーの連絡先情報は自分のメールアドレスを入力してください。
入力したら「次へ」をクリック
スコープはそのままなにもしないで次へ
テストユーザーもそのままでかまいません。
すると概要が表示されます。
一番下までスクロールしてダッシュボードに戻ります。
上が表示されるのでテストユーザーとして自分自身を追加しておきます。そうしないと自分でテストをすることができません。
左の「認証情報」をクリック そのあと上の認証情報を作成をクリックして「OAuth クライアント ID」を選択
すると
ここはデスクトップアプリを選択します。名前をつけるのですが、ここは適当に「デスクトップ クライアント: 2021年0224作成」とします。最後に作成をクリックします。
すると「OAuth クライアントを作成しました」と表示されます。
[OK]をクリックしましょう。すると
右側にダウンロードをするボタンがあるのでファイルをダウンロードします。ファイル名は「client_secret.json」に変更しておきましょう。
ではアプリケーションを作成しましょう。
まずパッケージマネージャーでGoogle.Apis.Sheets.v4をインストールします。そして上記のダウンロードしてきた「client_secret.json」をプロジェクトに追加します。プロパティの「出力ディレクトリにコピー」は「常にコピーする」に変更しておいてください。
では
https://developers.google.com/sheets/api/quickstart/dotnet?hl=ja
にあるコードを少しだけ変えてコピペしましょう。WindowsFormsアプリケーションとして作り変えるだけです。取得したセルの情報はメッセージボックスで表示されます。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 |
using System; using System.Collections.Generic; using System.Text; using System.Windows.Forms; using System.IO; using Google.Apis.Auth.OAuth2; using Google.Apis.Sheets.v4; using Google.Apis.Sheets.v4.Data; using Google.Apis.Services; using Google.Apis.Util.Store; public partial class Form1 : Form { public Form1() { InitializeComponent(); } static string[] Scopes = { SheetsService.Scope.SpreadsheetsReadonly }; static string ApplicationName = "Google Sheets API .NET Quickstart"; private void button1_Click(object sender, EventArgs e) { UserCredential credential; // DownloadしてきたJsonファイル using (var stream = new FileStream("client_secret.json", FileMode.Open, FileAccess.Read)) { string credPath = "token.json"; credential = GoogleWebAuthorizationBroker.AuthorizeAsync( GoogleClientSecrets.Load(stream).Secrets, Scopes, "user", CancellationToken.None, new FileDataStore(credPath, true) ).Result; } var service = new SheetsService(new BaseClientService.Initializer() { HttpClientInitializer = credential, ApplicationName = ApplicationName, }); // アクセスしようとしているのは以下のurlのスプレッドシート // https://docs.google.com/spreadsheets/d/1BxiMVs0XRA5nFMdKvBdBZjgmUUqptlbs74OgvE2upms/edit String spreadsheetId = "1BxiMVs0XRA5nFMdKvBdBZjgmUUqptlbs74OgvE2upms"; String range = "Class Data!A2:E"; SpreadsheetsResource.ValuesResource.GetRequest request = service.Spreadsheets.Values.Get(spreadsheetId, range); ValueRange response = request.Execute(); IList<IList<Object>> values = response.Values; StringBuilder sb = new StringBuilder(); if (values != null && values.Count > 0) { foreach (var row in values) { string str = String.Format("{0}, {1}", row[0], row[4]); sb.Append(str += "\n"); } } MessageBox.Show(sb.ToString(), "取得結果"); } } |
実行しようとするとログインを求められます。
テストなのでこのように表示されますが、Continueを選択。
許可を求められるので「許可」を選択。
「このページは閉じてよい」と書かれているので閉じます。
取得結果が表示されます。
これでスプレッドシートのデータをC#で取得することができました。
実行ファイルがあるフォルダ内にtoken.jsonというフォルダがつくられ、そのなかにGoogle.Apis.Auth.OAuth2.Responses.TokenResponse-userというファイルが生成されます。以降はログインの手続きなしでスプレッドシートのデータを取得できます。