C#でGoogleスプレッドシートにデータを追加するにはどうすればいいでしょうか?
まずはデータを追加すべきスプレッドシートを作成しましょう。それから共有されていないのであればアクセスすることはできないので(たしかにそうだよね)、共有する相手に自分のアカウントを追加しておきましょう。
C#でGoogleスプレッドシートにデータを追加するにはスプレッドシートIDを知る必要があります。IDはURLをみればわかります。
1 |
https://docs.google.com/spreadsheets/d/ここの文字列/edit |
です。
前回は
string[] Scopes = { SheetsService.Scope.SpreadsheetsReadonly };
と読み込みだけでしたが、今回は
string[] Scopes = { SheetsService.Scope.Spreadsheets };
に変更します。
実行ファイルがあるフォルダ内にtoken.jsonというフォルダがつくられ、そのなかにGoogle.Apis.Auth.OAuth2.Responses.TokenResponse-userというファイルが生成されているはずですが、上記の変更をした場合、このファイルが残っていると問題がおきるので削除するか、別の名前にしておきます。
テキストボックスに文字列を入力してボタンをおすと、文字列が自分のスプレッドシートに書き込まれるアプリをつくります。
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 |
public partial class Form1 : Form { public Form1() { InitializeComponent(); } // 前回のSheetsService.Scope.SpreadsheetsReadonlyから変更する static string[] Scopes = { SheetsService.Scope.Spreadsheets }; static string ApplicationName = "Google Sheets API .NET Quickstart"; private void button1_Click(object sender, EventArgs e) { UserCredential credential; // Scopesと書き込みたいスプレッドシートのIDからcredPathを作成する string scope = ""; if (Scopes[0] == SheetsService.Scope.Spreadsheets) scope = "rw"; else if (Scopes[0] == SheetsService.Scope.SpreadsheetsReadonly) scope = "r"; else scope = "other"; string spreadsheetId = "あなたのスプレッドシートのID"; string credPath = String.Format("{0}-{1}-{2}", "token.json", spreadsheetId, scope); using (var stream = new FileStream("client_secret.json", FileMode.Open, FileAccess.Read)) { 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, }); // データを新しい行に書き込む var wv = new List<IList<object>>() { new List<object>{ DateTime.Now.ToString(), textBoxB.Text, textBoxC.Text, textBoxD.Text, } }; var body = new ValueRange() { Values = wv }; var req = service.Spreadsheets.Values.Append(body, spreadsheetId, "シート1!A1"); // ValueInputOptionをUSERENTEREDにすると関数を書き込み可。RAWだとそのまま入る req.ValueInputOption = SpreadsheetsResource.ValuesResource.AppendRequest.ValueInputOptionEnum.USERENTERED; var result = req.Execute(); } } |
実行してみましょう。
すみません・・・作り方が見ても分からなかったのでDiscordなどで教えていただけないでしょうか?