Googleフォームと連携したスプレッドシートのデータを.NETで取得したり削除したり

オウルです。

皆さんは、Gmail、Googleドライブ使ってますか?
僕は便利なのでガンガン使ってます(所属会社ではGoogle Workspace)。今回は、そんなGoogleサービスの1つ、Googleフォームとスプレッドシートについてです。まぁタイトル通りです。

.NET Core3.1 コンソールアプリからGoogleフォームの回答の保存先スプレッドシートの値を取得、削除します。

ローカル環境
language .NET Core3.1 | C#
editor VSCode

Googleフォームとスプレッドシート

Googleフォームやスプレッドシートの概要については、ここでは省略します。

Googleフォームの回答の保存先をスプレッドシートに設定した場合、まるでGoogleフォームの回答がスプレッドシートで管理されているように見えがちですが、実はGoogleフォームが保持している回答をスプレッドシートにコピー表示しているだけなのです。その辺は、最後に少し補足しています。

また、自前でNoSQLなどを用意してGoogleフォームの内容を永続化するのも1つの方法ですが、一般的にはGoogle Apps Script APIのFormResponseあたりを使用して他のサービスと連携するケースが多いと思われます。

GCPプロジェクトを作成してAPIを有効化

では、GCPプロジェクトを作成してAPIを有効化することから始めます。.NET quickstartにあるように、Google Cloud ConsoleからGCPにプロジェクトを作成しましょう。Create a project and enable the APIを参考に進めてください。

プロジェクト作成後は、下記の画面(クラウドのWebコンソールのUIは、よく更新されるので変わっている可能性があります)からOAuth ウェブ クライアント ID を作成してJSONファイルをダウンロードします。

Sheets API

.NET版のGoogle Sheets v4クライアントライブラリを使用してGoogle Sheets APIリクエストします。ここからはコードベースです。

行取得

行削除

行削除は、Delete a rowにあるように、 spreadsheet.batchUpdateで行います。ただ、僕が調べる限り残念ながらサンプルコードはなかったので、spreadsheets.batchUpdateのサンプルとGoogle.Apis.Sheets.v4を参考に実装していきます。

Googleフォーム回答の考察

行削除について少し補足しておきます。フォームの回答の保存先スプレッドシートの行を削除してもフォームの回答自体を削除したわけではありません。試しに、行を削除した後にフォームの回答の保存先を選択するにある、「フォームからスプレッドシートのリンクを解除する」を操作後、再度フォームの回答の保存先を選択してみましょう。フォームの回答済みの内容が新たにスプレッドシートにコピーされるはずです。

Googleフォームの回答を削除するには、Google Apps ScriptのdeleteResponseになります。

フォームの回答のスプレッドシートへのコピー行の規則

Googleフォームの回答の保存先スプレッドシートを利用したアプリを考えるときに、とても気になる内容です。ですが、この規則についてのドキュメントは残念ながら見つけることができませんでした。なので、これは自分で確かめる他ないように思われます。僕が試した限りだと、1, 2, 3, …, n – 1, n と行がある場合、次は、n + 1 です。但し、手動で行を追加した場合は含まれません。つまり n = 5 の場合、手動で追加して今 n = 6 とすると、次に自動でコピーされるのは、n = 7 ではなく、n = 6 です。手動で追加した行が、n = 7 となります。

では、行クリアのときは?、行削除のときは?気になるところです。繰り返しになりますが、ドキュメントで見つけることができなかったので、このあたりは、せっかくですし、遊びながらご自分で確認してみるのもおもしろいかと思います。

カテゴリー.NET

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

CAPTCHA