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というファイルが生成されます。以降はログインの手続きなしでスプレッドシートのデータを取得できます。
