You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

开发Excel任务窗格插件调用OpenAI API遇chat属性未定义错误

解决"Cannot read properties of undefined (reading 'chat')"错误

核心原因分析

错误说明openai对象未被正确初始化,导致chat属性不存在。结合Excel任务窗格的Web运行环境,主要原因有两个:

  • 浏览器环境无法识别process.env,导致API密钥未正确传入OpenAI实例
  • 可能使用了不适合浏览器环境的导入方式

具体修复步骤

1. 替换环境变量的使用方式

Excel任务窗格运行在浏览器中,没有Node.js的process对象,不能通过process.env.OPENAI_API_KEY获取密钥。可以通过以下两种方式处理:

  • 开发测试(不推荐生产):直接传入API密钥(注意:生产环境绝对不能硬编码密钥,需通过后端代理)
  • 生产环境:搭建后端服务,插件通过调用后端接口间接请求OpenAI API,避免密钥暴露

2. 调整SDK导入与初始化代码

如果是浏览器环境,使用ES模块导入方式,确保OpenAI实例正确初始化:

// 替换require为ES模块导入
import OpenAI from "openai";

// 初始化OpenAI实例,这里示例用直接传入密钥(开发测试用)
const openai = new OpenAI({
  apiKey: "你的API密钥", // 生产环境请替换为后端代理方式
  dangerouslyAllowBrowser: true // 仅开发测试时使用,生产环境必须禁用
});

3. 修正返回值处理逻辑

OpenAI v4 SDK的返回值结构中,completion直接包含choices,不需要completion.data,原代码的这部分判断会导致后续报错,需要修正:

async function sendToGPT(formula) {
  try {
    const completion = await openai.chat.completions.create({
      messages: [
        { role: "system", content: "You are an assistant." },
        { role: "user", content: `Explain the following excel formula ${formula}.` }
      ],
      model: "gpt-3.5-turbo",
    });

    // 修正返回值判断逻辑
    if (completion.choices && completion.choices.length > 0) {
      const responseText = completion.choices[0].message.content;
      console.log(responseText);
      displayGPTResponse(responseText);
    } else {
      console.log('No completion found.');
      displayGPTResponse('No completion found.');
    }
  } catch (error) {
    console.error('Error sending data to GPT:', error);
    displayGPTResponse(`Error: ${error.message}`);
  }
}

4. 生产环境安全建议

绝对不要在前端代码中直接暴露OpenAI API密钥,否则会被恶意窃取。正确的做法是:

  • 搭建一个后端接口,由后端处理OpenAI API请求
  • Excel插件通过fetch或Axios调用后端接口,传入需要处理的公式,后端返回GPT的响应

内容的提问来源于stack exchange,提问作者Stefan

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.29 17:00:55