个人中心

联系我们

搜索
搜索 登录 免费注册
界面美化
业务优化
开发工具
图像管理
文档管理
Parasoft

新闻资讯

关注工具软件产品最新动态,了解软件开发行业新趋势。

使用 ONLYOFFICE 宏以 OpenAI 数据填充单元格

原创
软件开发
来源:ONLYOFFICE
API
人工智能
excel
数据可视化
文档管理
文件处理
报表
2024-02-06
API
人工智能
excel
数据可视化
文档管理
文件处理
报表

人工智能技术已经取得了长足的进步,并已成为可以自动化我们工作流程的宝贵工具。在上一篇文中,我们谈到了 ONLYOFFICE 宏,它可以使用 OpenAI API 生成论文。在本文中,我们将向您展示一个宏,它可以利用 OpenAI 获取的数据填充电子表格。



使用 OpenAI API

上次,我们通过 RapidAPI 平台连接了 OpenAI API。这是一种快速便捷的获取请求中介方式。不过,基本计划每月只提供 100 个请求。因此,这次我们要更上一层楼,创建自己的 Node.js Express 服务器。它将利用 OpenAI 库将 API 请求直接发送到相应的语言模型。它还将允许我们在从浏览器获取请求时绕过 CORS 错误。


注意!只有注册 OpenAI 账户并获得个人 API 密钥后,才能直接向 OpenAI 提出请求。


设置服务器

首先,我们为服务器创建一个新文件夹,并在终端执行以下命令,建立一个新的 Node.js 项目:


$ npm init -y


然后安装以下依赖项:


  • express 软件包 - 这是一个重要的框架,有助于实现服务器功能。

  • cors 包--提供启用 CORS 的中间件。

  • openai 软件包 - 提供从 Node.js 访问 OpenAI API 的便利。

  • dotenv 包 - 将 .env 文件中的环境变量加载到 process.env。

要安装这些软件包,请在终端运行 npm instal 命令:


$ npm install express

$ npm install openai

$ npm install dotenv --save

$ npm install cors


然后,我们创建 .env 文件。我们将在其中存储 API 密钥:


OPEN_AI_API_KEY="<YourOpenAIkey"

SECOND_API_KEY="YourAPIkey"


OPEN_AI_API_KEY 参数包含从 OpenAI 获取的 API 密钥,而 SECOND_API_KEY 参数则是我们服务器的 API 密钥。为了安全起见,我们将在传入的获取请求中加入该密钥。


然后,我们在 index.js 文件中初始化已安装的软件包:


const express = require('express');

const cors = require('cors');

const { Configuration, OpenAIApi } = require('openai');

require('dotenv').config();

const app = express();


const openai = new OpenAIApi(configuration);

app.use(cors());

app.use(express.json());


向 OpenAI 提出的成功请求必须包含 OpenAI API 密钥。为此,我们从 .env 文件中提取 API 密钥,并将其存储在配置变量中:


const configuration = new Configuration({

  apiKey: process.env.OPEN_AI_API_KEY,

});


然后,我们添加一个 post 路由,从中向 OpenAI 发送请求:


app.post('/completion', async (req, res) => {

}


我们还想实现 API 密钥,以确保安全。第二个 API 密钥应该包含在获取请求中。在这方面,我们的服务器需要检查传入的获取请求并验证包含的 API 密钥。为此,我们在路由中添加以下代码:


app.post('/completion', async (req, res) => {

  const requestApiKey = req.body.apiKey;

  

  if (!requestApiKey) {

    res.status(400).send({ error: "Error: API Key is missing." });

    return;

  }

  if (requestApiKey !== process.env.SECOND_API_KEY) {

    res.status(401).send({ error: "Error: API Key is incorrect." });

    return;

  }


如果 API 密钥正确,我们就会向 OpenAI 发送请求:


const completion = await openai.createCompletion({

    model: 'text-davinci-003',

    prompt: req.body.prompt,

    temperature: 0,

    max_tokens: 300,

  });

  res.json(completion.data.choices[0].text);


  • model 参数指定了用于生成文本的语言模型名称。本例中使用的是 text-davinci-003,它是用于生成文本的最先进模型。

  • prompt 参数指定语言模型生成文本的文本或上下文。我们将从获取请求正文中获取该值。

  • temperature 参数控制生成文本的随机性。值为 0 意味着文本是完全确定的,而值越大,生成的文本就越多变、越出人意料。

  • max-tokens 参数表示生成文本的最大长度(即单词或子单词)。

最后,我们将服务器设置为监听 3000 端口:


app.listen(3000, () => {

  console.log('Server running on port 3000');

});


整个 index.js 代码如下:


const express = require('express');

const cors = require('cors');

const { Configuration, OpenAIApi } = require('openai');

require('dotenv').config();

const app = express();

const configuration = new Configuration({

  apiKey: process.env.OPEN_AI_API_KEY,

});

const openai = new OpenAIApi(configuration);

app.use(cors());

app.use(express.json());

app.post('/completion', async (req, res) => {

  const requestApiKey = req.body.apiKey;

  

  if (!requestApiKey) {

    res.status(400).send({ error: "Error: API Key is missing." });

    return;

  }

  if (requestApiKey !== process.env.SECOND_API_KEY) {

    res.status(401).send({ error: "Error: API Key is incorrect." });

    return;

  }

  const completion = await openai.createCompletion({

    model: 'text-davinci-003',

    prompt: req.body.prompt,

    temperature: 0,

    max_tokens: 300,

  });

  res.json(completion.data.choices[0].text);

});

app.listen(3000, () => {

  console.log('Server running on port 3000');

});


构建宏

首先,我们向服务器发出获取请求:


fetch('http://<your_server_address>/completion', {

method: 'POST',

headers: {

'Content-Type': 'application/json'

},

body: JSON.stringify({

prompt: 'List the 10 wealthiest countries in the world. Provide GPT figures',

apiKey: '<YourAPIkey>'

})

})


我们在请求正文中指定了 prompt 和 apiKey 值。请注意,这些参数会根据您要接收的数据和服务器 API 密钥而有所不同。


接下来,我们将响应解析为 JSON 数据:


.then(response => response.json())


我们用换行符将响应文本分割成字符串数组,并将活动电子表格作为目标:


.then(data => {

var arrAllRows = data.split(/\r?\n|\r/);

var wSheet = Api.GetActiveSheet()


接下来,我们设置了一个嵌套循环,以遍历电子表格中的行和列。我们使用 split() 函数根据需要分解数据。我们使用 SetValue 方法将响应数据插入每个单元格,同时确保删除任何多余的空格。值得一提的是,我们在开始时将 singleRow 变量设置为 2,以便从 arrAllRows 数组中获取我们想要的特定数据。此外,我们还使用 AutoFit 函数来调整单元格宽度,以获得更好的显示效果:


var i = 1;

var j = 1;

  for (var singleRow = 2; singleRow < arrAllRows.length; singleRow++) {

            var rowCells = arrAllRows[singleRow].split('-');

            for (var rowCell = 0; rowCell < rowCells.length; rowCell++) {

                var oRange = wSheet.GetCells(i,j); 

                oRange.SetValue(rowCells[rowCell].trim());

                oRange.AutoFit(false, true)

                j = j + 1;

            } 

            i = i + 1;

            j = 1;

        }

});


最后,我们执行 setInterval 函数重新加载电子表格:


let reload = setInterval(function(){

        Api.asc_calculate(Asc.c_oAscCalculateType.All);

    });

})();


整个宏代码如下:


(function()

{

   fetch('http://localhost:3000/completion', {

method: 'POST',

headers: {

'Content-Type': 'application/json'

},

body: JSON.stringify({

prompt: 'List the top 10 wealthiest countries and provide their GDP figures',

apiKey: '<YourAPIkey>'

})

})

.then(response => response.json())

.then(data => {

var arrAllRows = data.split(/\r?\n|\r/);

var wSheet = Api.GetActiveSheet();

var i = 1;

var j = 1;

  for (var singleRow = 2; singleRow < arrAllRows.length; singleRow++) {

            var rowCells = arrAllRows[singleRow].split('-');

            for (var rowCell = 0; rowCell < rowCells.length; rowCell++) {

                var oRange = wSheet.GetCells(i,j); 

                oRange.SetValue(rowCells[rowCell].trim());

                oRange.AutoFit(false, true)

                j = j + 1;

            } 

            i = i + 1;

            j = 1;

        }

});


let reload = setInterval(function(){

        Api.asc_calculate(Asc.c_oAscCalculateType.All);

    });

})();


现在,打开电子表格编辑器并运行我们的宏!


点击以上图片免费观看视频 ⬆


我们希望您能利用本文中概述的概念,使您的工作流程更加高效。我们衷心希望您能利用我们的各种 API 方法,并将它们融入到您的日常工作中。


如果您有任何问题或想法,请随时留言或联系我们。我们愿意倾听您的想法,并渴望与您合作。祝您在探索过程中一切顺利!


联系我们

周一至周日 8:00-23:00

免费热线

023-62585653

张经理:13082556879

罗经理:17558866126

许经理:13057566525

开发外包

ERP-一体化

小程序

企业微信客服

版权所有:重庆庚乾信息科技有限公司 ©2025 Gengqian Information Technology Co., Ltd. 渝ICP备2022008063号-2 渝公网安备50010702505508

版权所有:重庆庚乾信息科技有限公司

©2025 Gengqian Information Technology Co., Ltd. 渝ICP备2022008063号-2 渝公网安备50010702505508