【1】. DifyでSpreadSheetに読み書きできるようにする
Difyから、SpreadSheetの値を、「読み込む」、「書き込む」 を出来るようにします。
1.google_Sheetsプラグインをインストールする
2.Dify側にGoogleの設定を行います
2-1.Google Cloudを開きます
-
プラグイン一覧に
google sheetsが出来るのでこれをクリック。現れる右画面のAPIキー認証設定をクリックします。
-
API認証設定画面の、
Google スプレッドシートAPIのサービスアカウントJSONキーをクリック、Google Cloudの画面が開きます。
2-2.Google Sheets API を有効にする
2-3.サービス アカウントを作成、Difyに設定する
-
左メニュー内の
認証情報(鍵のマーク)をクリック、+認証情報を作成をクリック、サービス アカウントをクリックします
-
①サービス アカウントの作成
サービス アカウント名を入力する(画像はmoicen_Dify_Spreadsheet)。
サービス アカウントIDは自動的に入力される。
作成して続行をクリックします
-
完了をクリックします
③は入力省略
-
ただいま作成した
サービス アカウントをクリックします
-
上のメニュー内の
鍵をクリックします
-
キーを追加をクリック、新しい鍵を作成をクリックします
-
JSONにチェックがついていることを確認し、作成をクリックします
-
JSONのファイルがダウンロードされます
-
ダウンロードされた
JSONファイルを、テキストアプリ等(Windowsではメモ帳)で開き、中身を全部選択しコピーします
-
Difyの画面に戻り、
APIキー認証設定の画面に入力
認証情報JSONにコピーしたJSONファイル中身を貼り付けます
認証名に任意の名前(画像ではmoicen_Dify_Spreadsheet)を入力し、保存をクリックします
-
「APIキー認証設定」が、「1 認証」へ変化します
3.Spreadsheetに設定(編集権限)を行います
-
Google Cloudページで、左メニュー内の認証情報(鍵のマーク)の一覧中の、作成したサービス アカウントをクリックします
-
詳細ページの、メールをコピーします
-
Spreadsheetを開き、右上の
共有をクリックします
-
ユーザー、グループ、スペース、カレンダーの予定を追加にコピーしたメールアドレスをペーストし、完了をクリックます。
4. ワークフローを立ち上げる
5. Spreadsheetの値を、「読み込み」できるワークフローを作成する
-
ユーザー入力ノードの
+をクリック、上メニューのツールを選択、Google スプレッドシートのBatch Getをクリックします
※Batch Get:スプレッドシート上の値を取得するノード

-
ユーザー入力ノード設定画面の
入力フィールド右側の+をクリック、入力フィールドを新規作成する
フィールドタイプ:短文
変数名:input
最大長:48
保存をクリックします



-
スプレッドシートのURL欄より
Spreadsheet IDをコピーする
※補足: URLの/d/の後ろから/までがIDとなります。
https://docs.google.com/spreadsheets/d/(この部分)/edit?gid=0#gid=0
このとき、シート1のA1セルに何か文字を入力(画像ではこんにちは。)
-
Difyの
BATCH GETの設定画面へ入力
ワークスペースのデフォルトをクリックし、先ほど作成したAPIキー(画像ではmoicen_Dify_Spreadsheet)を選択する
Spreadsheet ID:Spreadsheet ID(先ほどコピーした)
Ranges:[シート1!A1]
Data Time Render Option:SELIAL_NUMBER(デフォルトのまま)
Major Dimention:ROWS
-
BATCH GETノードの
+をクリック、テンプレートを選択する
BATCH GETで取得した値はJSON形式なので、テンプレートノードにて後のノードに渡せる様に変換する

-
テンプレートノードの設定
入力変数に左枠にsheetA1と入力、右枠にBATCH GETの{x}jsonを選択する
コード枠内に、{{ sheetA1 }}と入っていることを確認する

-
出力ノードを設定する
テンプレートノードの+をクリック、出力をクリックします
出力変数の右側+をクリック、にテンプレートの{x} outputを選択します




-
Spreadsheetの値のみ取り出します
現在の実行結果で得られた値はJSONの中身そのまま全部です。ここからSpreadsheetの値の部分のみ抜き出します
以下のコードをテンプレートノードに入力します{{ sheetA1[0]['valueRanges'][0]['values'][0][0] }}
-
再び
テスト実行をクリック、実行してみましょう
実行結果が画像の様にSpreadsheetのシート1のA1セルの値が出力されれば成功です

6. Spreadsheetに、値を「書き込み」できるワークフローを追加する
-
テンプレートノードと出力ノードの間の線上の
+をクリック、上メニューのツールを選択、Google スプレッドシートのBatch Updateをクリックします
※Batch Update:スプレッドシートに、値を書き込むノード

-
Difyの
BATCH UPDATEの設定画面へ入力
ワークスペースのデフォルトをクリックし、先ほど作成したAPIキー(画像ではmoicen_Dify_Spreadsheet)を選択する
Spreadsheet ID:Spreadsheet ID(先ほどコピーした)
Data:以下のコードをペースト、(ユーザー入力{x}input)、(テンプレート{x}output)の部分をDifyの変数に置き換えます
※ユーザー入力{x}input、テンプレート{x}outputの入力は、挿入したい箇所に/を入力すると選択メニューが出るので選択します(元の(ユーザー入力{x}input)、(テンプレート{x}output)の文字は削除)
Value Input Option:RAW
Include Values in Response:False
Response Value Render Option:FORMATTED_VALUE
Response Date Time Render Option:SERIAL_NUMBER[{ "range":"シート1!A2:C2", "values":[ ["(ユーザー入力{x}input)", "(テンプレート{x}output)"] ] }]
-
再び
テスト実行をクリック、実行してみましょう
実行結果が画像の様に、A2セルにDifyに入力した値、B2セルにA1セルの値が出力されれば成功です!
実行するたびに、A,B列の最終行に値が記載されていきます。


⇓


【2】 休薬判定の結果をSpreadSheetに書き込んでみよう
「薬の名前と手術日だけ入力すれば、AIが判断してくれるアプリ」というものを作り(以下を試す場合はご自身で作成してください。同じ構造であれば問題はありません。)、
その続きを、【1】. DifyでSpreadSheetに読み書きできるようにするの応用で作っていきます。
構造:
①ユーザーが入力した薬剤と手術日を受けてLLMが休薬情報を提示する(「薬の名前と手術日だけ入力すれば、AIが判断してくれるアプリ」の構造)
②スプレッドシートに上から順番に情報を書き込みたいので、最終行(記載されていない行)の情報を取得する。
③ユーザーが入力した薬剤、手術日、LLMの返答を、③で取得したスプレッドシート最終行に記載する。
1.スプレッドシートを作成する
スプレッドシートを新規作成し、
A1セル:drug_name
B1セル:ope_day
C1セル:LLM_return
と記載してください。

2.スプレッドシートの最終行を取得する
最終行にデータを追加していきたいので、まず最終行がどこにあるのかを取得します。
-
事前に作成したフローを開きます(「薬の名前と手術日だけ入力すれば、AIが判断してくれるアプリ」)
-
LLMノードと出力ノードの間にBATCH GETノードを追加し、設定を入力します
ワークスペースのデフォルトをクリックし、先ほど作成したAPIキー(画像ではmoicen_Dify_Spreadsheet)を選択する
Spreadsheet ID:Spreadsheet IDをペースト
Ranges:[シート1!A:A]
(Rangesは表の行数(最終行の数字)を知りたいのでA:Aの範囲でOKです。)
Date Time Render Option:SERIAL_NUMBER(デフォルトのまま)
Major Dimension:ROWS
Value Render Option:FORMATTED_VALLUE
-
一旦、出力を見てみます
テスト実行をクリックします。
薬剤名と手術日を入力し、実行開始をクリックします。
BATCH GETノードをクリックし、最後の実行をクリック、出力の欄を見ます。
以下の様な出力(JSON)になっていると思います。


-
BATCH GETノードと出力ノードの間にコード実行ノードを追加し、設定を入力します
入力変数:ss_body、BATCH GET {x}json
コード:
コードのタイプをPYTHON3→JAVASCRIPTに変更します。
以下のコードを貼り付けます
出力変数:result、String

function main({ ss_body, sheet_name = "シート1" }) { 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}:C${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};
最後rangeで文字列を整形しています。実際に
テスト実行を実行し、コード実行ノードの最後の実行を見てみると、"シート1!A2:C2"のような範囲になっているはずです。
-
コード実行ノードと出力ノードの間にBATCH UPDATEノードを追加し、設定を入力します
ワークスペースのデフォルトをクリックし、先ほど作成したAPIキー(画像ではmoicen_Dify_Spreadsheet)を選択する
Spreadsheet ID:Spreadsheet IDをペーストData:
以下のコードをペースト、(コード実行{x}result)、(ユーザー入力{x}drug_name)、(LLM{x}text)の部分をDifyの変数に置き換えます
※挿入したい箇所に/を入力、選択メニューから選択(元の(ユーザー入力{x}input)、(テンプレート{x}output)の文字は削除)[{ "range":"(コード実行{x}result)", "values":[ ["(ユーザー入力{x}drug_name)", "(テンプレート{x}ope_day)", "(LLM{x}text)"] ] }]






















