LoginSignup
6
1

Office ScriptからGPTを利用する方法 - AI Builderバージョン

Posted at

はじめに

20203/8/23のPython in Excelの機能は大変盛り上がりましたね!
Python Lover の一人としても非常に楽しみな機能ですが、
使用できるライブラリはあくまで限定的であり、用途は限られます。

Python in Excelで使用できるライブラリ

  • json
  • Matplotlib
  • NumPy
  • pandas
  • scikit-learn
  • SciPy
  • Seaborn
  • statsmodels
  • regex

詳しくは公式のレファレンスをどうぞ

SNSを拝見すると、特にニーズが高そうなライブラリはrequestsなのかなと。

こちらはPower AutomateOffice Scriptを活用することで実装できたりするので、
アウトプットを残します。

それでは本編をどうぞ~

大変参考になる記事

Power Platform界隈では、この方は最強ですね・・・。調べると全部載っていらっしゃる・・・。

合わせて先日私が書いたQiitaの記事もどうぞ~

Python in Excel はこちら

この方は本当に、もはや速すぎて衝撃です・・・。

Python in Excelの発表当日に記事出されてました💦

1. Power Automate側の設定

まずは全体像

image.png

Power Automateの文字列はデフォルトのものを使っているので、検索すると同様のものが出てきます。

GPTでテキストを作成する機能はプレビューで使用条件ありです。
詳しくは下記をどうぞ。

20203.08.24 時点

GPTでテキストを作成する機能はChatGPT APIに置き換えてもいいと思います。
それも合わせて後述しますね。

1. 自動化したクラウド フローでHTTP 要求の受信時を選択します。

image.png

image.png

Webhookなどで利用する方法ですね。

HTTP 要求POST形式で、URIはフロー作成時に自動生成されます。

本文(body)は自分で定義することが出来るので、
とりあえずテキストオブジェクトだけ送る形式にしましょう。

スキーマ
{
    "type": "object",
    "properties": {
        "prompt": {
            "type": "string"
        }
    }
}

JSONのスキーマでpromptをAPIに渡し、GPT利用の際に使用します。
この方法は他のAPI利用時にも使えそうですね!

image.png

まったく同じがご希望であれば、上記のスキーマを要求本文のJSON スキーマにコピペしてください。

2. GPT でテキストを作成する

image.png

繰り返しになりますが、あくまでプレビュー機能です。
別の手段としてChatGPT APIの利用などが良いかと。

image.png

GPTのAPIの記事はとても多いので、説明は省きます。

3. 応答 でGPT でテキストを作成するの結果を返す

image.png

戻り値
{
  "result": "@{outputs('GPT_でテキストを作成する')?['body/responsev2/predictionOutput/text']}"
}

こちらも後述するOffice Scriptに合わせて、自分で定義をしています。
見ての通りPower Automateの方はとても単純です。

API Keyも不要なのでAI Builder最高過ぎます・・・
※ライセンスがないと使えません

2. Office Script

シナリオは下記の通りとします

image.png

画面はExcel on Webです。Microsoft 365のExcelであれば、アプリでも同様になります。

セルA2にプロンプトを入力したら、セルB2に結果が返る

こういったシナリオにしましょう。

コード

Office Script
async function main(workbook: ExcelScript.Workbook): Promise<void> {
    // Your code here
    const apiUrl = 'こちらにPower Automateで生成されたHTTP 要求受信時 HTTP POST の URLを設定';

    // Excelのシートを取得
    const targetSheet = workbook.getWorksheet("Sheet1");

    // シートから入力セル(A2セル)の値を取得
    const userInput = targetSheet.getRange("$A$2").getValue();

    // Webサービスに送信するデータオブジェクトを作成
    const requestData = { prompt: userInput };

    // Webサービスのリクエストパラメータを設定
    const requestOptions =
    {
        method: "POST",
        headers:
            { "content-type": "application/json" },
        body: JSON.stringify(requestData)
    };

    // Webサービスにリクエストを送信し、結果を待つ
    const response = await fetch(apiUrl, requestOptions);

    // レスポンスデータをJSON形式で解析
    const jsonResponse: JSONData = await response.json();

    // シートの結果表示セル(B2セル)に結果を設定
    targetSheet.getRange("$B$2").setValue(jsonResponse["result"]);

    // 結果をコンソールにも出力
    console.log(jsonResponse["result"]);
}

// JSONデータの型を定義
interface JSONData {
    result: string
}

JSONの方は作成者の自由に設定できます。今回はテキストだけでいいです。
こちらを実行すると・・・

image.png

じゃじゃ~ん
HTTP 要求が実装出来ました!

最後に

カスタム関数にするには、準備が必要になりそう・・・。
なので研究を進めます!

個人的にはPython in Excelも楽しそうですが
Office Scriptもいいぞ~ ということで締めたいと思います!

6
1
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
6
1