4
7

More than 3 years have passed since last update.

C#からSpreadSheetの読み書きをする(2021年9月版)

Last updated at Posted at 2021-09-10

【GCPでの手続き】

GCPでの手続き

①GCPプロジェクトを作成する

  • こちらにアクセス
    • 以下のどちらかの画面が出るので、進行してプロジェクトを作成する image.png image.png

②認証情報に進む

image.png

③使用するAPIを指定する

image.png

※上記画面への進み方が分からなくなった場合

  • GCPにアクセス

image.png
image.png

④OAuth同意画面の設定

image.png

⑤スコープを追加する

image.png
image.png
image.png

⑥OAuthクライアントID設定

image.png

⑦credentialsのダウンロード

image.png

⑧アプリを公開する

image.png
image.png

【スプレッドシートの準備】

スプレッドシートの準備

①スプレッドシートの用意

  • コチラからスプレッドシートを新規作成する
  • シートに、値を適当に入れておく

image.png

②スプレッドシートの公開とID取得

image.png
image.png
image.png

【VisualStudioでのプロジェクト準備】

VisualStudioでのプロジェクト準備

①VisualStudioにて、Nugetパッケージマネージャーを開く

image.png

②パッケージをインストール

  • パッケージマネージャーにて下記を入力してEnter
    • Install-Package Google.Apis.Sheets.v4
  • Google.Apis.Sheets.v4 1.55.0.2371' が xxxxxxxx に正常にインストールされました」と表示されたらOK

image.png

③credentials.jsonの配置

  • GCP手続きの最後にダウンロードしたファイルcredentials.jsonにリネームする
  • VisualStudioにて、ソリューションエクスプローラーを開く
  • credentials.jsonをD&Dで追加する
    image.png

  • ↑D&Dでうまくいかない場合は、ファイルを選んで追加する
    image.png

④credentials.jsonのプロパティ設定

  • プロパティを開き「常にコピーする」に変更

image.png
image.png

【C#ソースコード_SpreadSheetからの読み取り編】

C#ソースコード_SpreadSheetからの読み取り編

①VisualStudioにて、ソースコードをコピペ

  • 以下をコピペする
    • ※ソースコードの冒頭の、SpreadsheetIdに、先ほど作成したSpreadSheetのIDを入力する
      • URL「d/」「/edit」に挟まれた部分
      • https://docs.google.com/spreadsheets/d/xxxxxxxxxxxxxxxxxxxxx_xxxxxxxxxxxxx/edit#gid=0
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;
using System;
using System.Collections.Generic;
using System.IO;
using System.Threading;

class Program
{
    // https://docs.google.com/spreadsheets/d/xxxxxxxxxxxxxxxxxxxxx_xxxxxxxxxxxxx/edit#gid=0
    const string SpreadsheetId = "xxxxxxxxxxxxxxxxxxxxx_xxxxxxxxxxxxx";

    static void Main(string[] args)
    {
        // SheetsServiceを作成.
        SheetsService service = GetSheetsService();

        // 通信リクエストを作成.
        var request = service.Spreadsheets.Values.Get(SpreadsheetId,"シート1!1:1000");

        // 通信の同期実行. レスポンスを受け取る.
        ValueRange response = request.Execute();

        IList<IList<object>> values = response.Values;

        for (int i = 0;i < values.Count;i++)
        {
            for (int k = 0;k < values[i].Count;k++)
            {
                Console.WriteLine($"({i},{k}) = " + values[i][k]);
            }
        }
        Console.Read();
    }

    static SheetsService GetSheetsService()
    {
        var initializer = new BaseClientService.Initializer();
        initializer.HttpClientInitializer = GetUserCredential();
        initializer.ApplicationName = "test";
        var sheetsService = new SheetsService(initializer);

        return sheetsService;
    }

    static UserCredential GetUserCredential()
    {
        ClientSecrets clientSecrets;
        using (var stream = new FileStream("credentials.json",FileMode.Open,FileAccess.Read))
        {
            clientSecrets = GoogleClientSecrets.FromStream(stream).Secrets;
        }

        // Googleの認証通信開始.
        UserCredential credential = GoogleWebAuthorizationBroker.AuthorizeAsync(
            clientSecrets,
            new string[] { SheetsService.Scope.Spreadsheets },
            "user",
            CancellationToken.None,
            new FileDataStore("token.json",true)).Result;

        return credential;
    }
}

②実行する

  • 実行すると、Googleアカウントのログインが求められるので、GCPで使用したアカウントでログインする
  • その後、警告が表示されるが、左下の詳細をクリック
    • xxxに移動をクリック

image.png

image.png

③コンソールにて表示された事を確認!

image.png

【C#ソースコード_SpreadSheetへの書き出し編】

C#ソースコード_SpreadSheetへの書き出し編

①Main関数の置き換え

  • Main関数を以下に置き換える
static void Main(string[] args)
{
    // 書き込む値.
    var values = new List<IList<object>>()
    {
        // 1行目に書き込む値.
        new List<object>
        {
            1,2,3,4,5,
        },

        // 2行目に書き込む値.
        new List<object>
        {
            "6","7","8","9","10",
        },

        // 3行目に書き込む値.
        new List<object>
        {
            DateTime.Now
        }
    };

    // リクエストボディを作成.
    var requestBody = new ValueRange() { Values = values };

    // SheetsServiceを作成.
    SheetsService service = GetSheetsService();

    // 通信リクエストを作成.
    var request = service.Spreadsheets.Values.Update(requestBody,SpreadsheetId,"シート1!1:1000");
    request.ValueInputOption = SpreadsheetsResource.ValuesResource.UpdateRequest.ValueInputOptionEnum.USERENTERED;

    // 通信実行.
    var result = request.Execute();
}

②SpreadSheetに値が反映された事を確認!

image.png

4
7
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
7