スプレッドシートでGoogle App Script(GAS)を使ってOpenAI Text Generation APIを呼ぶと便利です。
OpenAI APIキーを取得して、以下のようなコードをシートのApp Scriptに記述するだけで使えるようになります。
var OPENAI_API_KEY = "sk-xxxxxxxxxxxxxxxx";
// JSDocの記法の一部がスプレッドシートのオートコンプリートに反映される
/**
 * GPTを呼び出すカスタム関数
 *
 * @param {string} input GPTへの入力文字列
 * @param {model} model モデル名。デフォルトは"gpt-3.5-turbo"
 * @param {boolean} useCache キャッシュを使用するかどうか。長い入力を使う時はキャッシュを無効化する必要がある
 * @return GPTで生成した結果
 * @customfunction
 */
function GPT(input, model, useCache) {
    if (model === void 0) { model = "gpt-3.5-turbo"; }
    if (useCache === void 0) { useCache = true; }
    // キャッシュから取得
    var cache = CacheService.getScriptCache();
    if (useCache) {
        try {
            var cachedResult = cache.get(input);
            if (cachedResult) {
                return cachedResult;
            }
        }
        catch (e) {
            if (e.message.includes("Argument too large: key")) {
                throw new Error("キャッシュの取得に失敗しました。入力を短くするか、キャッシュを無効にしてください。");
            }
            else {
                throw e;
            }
        }
    }
    // OpenAI Chat Completion APIで生成
    var URL = "https://api.openai.com/v1/chat/completions";
    var headers = {
        "Content-Type": "application/json",
        "Authorization": "Bearer ".concat(OPENAI_API_KEY)
    };
    var body = {
        model: model,
        // max_tokens: 100,
        messages: [{ role: "user", content: input }]
    };
    var response = UrlFetchApp.fetch(URL, {
        method: "post",
        headers: headers,
        payload: JSON.stringify(body)
    });
    var result = JSON.parse(response.getContentText()).choices[0].message.content;
    // キャッシュに保存
    if (useCache) {
        cache.put(input, result, 21600);
    }
    return result;
}
これで、=GPT()という関数が使えるようになります。
ScriptCacheで同じ内容でAPIが連続して叩かれないようにしています。キャッシュの有効期限は6時間(21,600秒)なので注意しましょう。
お好みでmax_tokenやtemperature等をパラメータで指定できるようにしてください。
clasp版
google/claspを使ってTypeScriptで記述する場合は以下のような感じです。
GASではfetchがUrlFetchAppになる所と、importが使えない点などに気をつければ、あとは普通だと思います。

