0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

DifyのGoogle Spread Sheetプラグインで最終行に要素の追加を行う

Last updated at Posted at 2025-11-05

Difyのスプレッドシートプラグインが出てやれることが広がった感じがします。

問い合わせなどがあったときに行の追加が動的にできると良いですが、最終行をそのままだと取得できないのでBATCH GETとUPDATEを組み合わせて対応してみたメモです。

1. フロー作成まえの準備

1-1. サービスアカウントの作成とJSON認証情報

調べると以下のような記事が出てきますが、今回はGoogle系サービスのAPIを利用するにあたりサービスアカウントを使った認証をします。

サービスアカウントのメールアドレスとJSONのキーを取得しましょう。

1-2. Difyのプラグインインストール

Spread Sheetのプラグインをインストールしましょう。

CleanShot 2025-11-06 at 01.00.11.png

インストールしたら設定まで実施。

CleanShot 2025-11-06 at 01.00.07.png

1-3. 利用するシートの用意

スプレットシートを用意して、サービスアカウントのメールアドレスに編集権限を与えてください。

CleanShot 2025-11-06 at 01.02.19.png

その後、シートの中身を用意します。

  • シート名: シート1
  • フィールド名: お名前 / メール

だけを用意したシートを用意しました。試しに2行目に値も入れています。

CleanShot 2025-11-06 at 00.51.44.png

2. 環境変数の設定

チャットフローを作成していきますが、まずは環境変数を指定

スプレッドシートのシートIDとシート名をよく使い回すのでミスを回避するために環境変数に入れておきます。

CleanShot 2025-11-06 at 00.50.07.png

ssidとsheet_nameという変数を作成し、文字列(String)で指定して値を入れます。

  • ssid: スプレッドシートのIDです
    • URLの/d/の後ろから/までがIDとなります
    • https://docs.google.com/spreadsheets/d/(この部分)/edit?gid=12345677
  • sheet_name、シート1などのシート名を設定します

CleanShot 2025-11-06 at 00.49.35.png

設定できると以下のようになります。

CleanShot 2025-11-06 at 00.56.00.png

3. BATCH GETノード - 最終行の取得

目的は行の追加ですが、まずは最終行がどこにあるのか?の取得です。以下を設定しましょう。

  • Spreadsheet ID: 先ほどの環境変数のssidを指定
  • Ranges: [シート名の環境変数!A:A]
  • Date Time Render Option: SERIAL_NUMBER(デフォルトのまま)
  • Major Dimension: ROWS
  • Value Render Option: FORMATTED_VALLUE

CleanShot 2025-11-06 at 01.25.30.png

Rangesは表の行数(最終行の数字)を知りたいのでA:Aの範囲でOKです。

一旦出力をみてみる

プレビューで"テスト"など適当に送り、ワークフロー処理の中身を確認してみます。

CleanShot 2025-11-06 at 00.46.44.png

{
  "text": "",
  "files": [],
  "json": [
    {
      "spreadsheetId": "xxxxxxxxxxxxxx",
      "valueRanges": [
        {
          "majorDimension": "ROWS",
          "range": "'シート1'!A1:A1000",
          "values": [
            [
              "お名前",
              "メール"
            ],
            [
              "のびすけtest",
              "hoge@hoge.com"
            ]
          ]
        }
      ]
    }
  ]
}

このようなJSONになります。

4. コード実行ノード - シートに情報を作成する箇所を特定する

コード実行のノードを追加します。

まずはコードのタイプを JAVASCRIPTに変更します。

image.png

次に入力変数を設定します。

CleanShot 2025-11-06 at 01.31.21.png

  • ss_body: BATCH GETの出力変数のJSONを指定

CleanShot 2025-11-06 at 01.30.29.png

  • sheet_name: 最初に作成した環境変数を指定

最後にコードを貼り付けます。

function main({ss_body,sheet_name}) {    
    const last_row = ss_body[0].valueRanges[0].values.length;
    const new_line_num = last_row + 1;
    const range = `${sheet_name}!A${new_line_num}:F${new_line_num}`;  
    return {
        result: range
    }
}

ここではss_body[0].valueRanges[0].valuesにシートの中身の要素が入ってくるのでlengthを指定することで長さ(=行数)がわかります。

last_rowが最終行なので、const new_line_num = last_row + 1;とすることで次に追加する行数番号が分かります。

const range = ${sheet_name}!A${new_line_num}:F${new_line_num};

最後にレンジ情報の文字列を整形しています。

実際には"シート1!A3:F3"のような範囲になっているはずです。

5. BATCH UPDATE - 更新

コード実行の後にBATCH UPDATEノードを追加します。

  • Spreadsheet ID: 最初に要したssidを指定

CleanShot 2025-11-06 at 01.34.50.png

  • Data: [{"range":"XXXX", "values":[["すがわら","hoge@hogehoge.com"]]}]という指定で大乗です。

XXXXの箇所には、先ほどの"シート1!A3:F3"のような範囲の文字列を入れたく、コード実行のresultを指定しましょう。

CleanShot 2025-11-06 at 01.43.25.png

他の設定そのままで大丈夫です。

この状態で最後にプレビューなどでtestなど送信すると情報がスプレッドシートに入っていきます。

CleanShot 2025-11-06 at 01.38.33.png

今回はすがわら,hoge@hogehoge.comを固定で入れてましたが、ユーザーの入力情報からシートに追記できたら便利そうですね。

まとめ

意外とプラグインを使って行の追加の例は見なかったので誰かの参考になると幸いです。

一回やってしまえばなんてことないですが...スプレッドシート連携は行追加が結構癖があるように感じました。

前に一回やって今回思い出しつつ試してみました。
また忘れる可能性あるのでちゃんとメモ取るの大事ですね。

0
0
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
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?