Use a macro ONLYOFFICE para analisar dados da planilha

13 setembro 2023By Klaibson

Embora o ChatGPT 4 agora forneça recursos aprimorados, alguns usuários ainda preferem o ChatGPT 3.5 devido ao seu menor custo de token. No entanto, o ChatGPT 3.5 não possui recursos de upload de arquivos, impedindo os usuários de analisar planilhas de dados. Nesta postagem do blog, demonstraremos como criar uma macro ONLYOFFICE que supere essa limitação, permitindo analisar planilhas usando a API OpenAI.

Use a macro ONLYOFFICE para analisar dados da planilha

Sobre a macro

Para contornar essa limitação, nossa macro segue estas etapas:

  1. Ele coleta valores de células selecionados da planilha.
  2. Compila esses valores em uma matriz.
  3. Converte esta matriz em uma string.
  4. Envia-o usando uma solicitação de busca para um servidor proxy Node.js.
  5. O servidor recupera a matriz do corpo da solicitação.
  6. Em seguida, utiliza a biblioteca OpenAI para enviar uma solicitação de API ao OpenAI.
  7. Assim que a resposta for recebida, o servidor a envia de volta para a macro dentro de um objeto de resposta.

Para obter instruções detalhadas sobre como configurar o servidor proxy, incluindo o código completo, confira nosso post no blog que demonstra como criar uma macro para preencher planilhas com dados do OpenAI.

Observação! Observe que esta macro é mais adequada para tabelas de tamanho médio, normalmente em torno de 50 linhas, devido à limitação de token do modelo ChatGPT 3.5 de 4.096 tokens.

Construindo a macro

Primeiro recuperamos o intervalo atualmente selecionado em uma planilha:

// Get the selected range using ONLYOFFICE API
var selection = Api.GetSelection();

Em seguida, criamos um array vazio chamado rowData para armazenar os dados que serão coletados das células selecionadas:

  // Initialize an array to store all data
  var rowData = [];

Iteramos cada célula no intervalo selecionado usando um loop ForEach. Para cada célula, recuperamos seu valor usando o método GetValue e depois adicionamos esse valor ao array rowData:

// Use ForEach to iterate through the selected range
  selection.ForEach(function (cell) {
    // Retrieve the cell value using ONLYOFFICE API
  var cellValue = cell.GetValue();
    // Add cell value to the rowData array
    rowData.push(cellValue);
  });

Depois disso convertemos os valores coletados no array rowData em uma única string onde os valores são separados por vírgulas:

 // Merge the values in rowData and separate them by commas
  var rowDataAsString = rowData.join(',');

Criamos um objeto chamado requestData:

 // Prepare the data to send in the POST request
  var requestData = {
    prompt: `analyze this data ${rowDataAsString}`, // Use the merged string here
    apiKey: '<APIkey>', // Replace with your API key
  };
  • O campo prompt inclui a sequência mesclada de valores de células para análise.
  • O campo apiKey contém a chave de API usada pelo servidor Node.js para autenticar as solicitações de busca recebidas.apiKey field contains the API key used by your Node.js server to authenticate the incoming fetch requests.

Em seguida, usamos a função fetch para enviar uma solicitação POST para o URL especificado:

 fetch('http://localhost:3000/completion', {
    method: 'POST',
    headers: {
      'Content-Type': 'application/json',
    },
    body: JSON.stringify(requestData),
  })

Lidamos com a resposta da API primeiro convertendo-a para o formato JSON, registrando os dados no console e também implementando o tratamento de erros caso haja algum problema com a solicitação POST:

.then(function (response) {
      return response.json();
    })
    .then(function (data) {
      // Log the API response
      console.log(data);
    })
    .catch(function (error) {
      // Handle any errors that occur during the fetch
      console.error('Error:', error);
    });

Todo o código da macro é o seguinte:

(function()
{
   // Get the selected range using ONLYOFFICE API
  var selection = Api.GetSelection();
  // Initialize an array to store all data
  var rowData = [];
  // Use ForEach to iterate through the selected range
  selection.ForEach(function (cell) {
    // Retrieve the cell value using ONLYOFFICE API
  var cellValue = cell.GetValue();
    // Add cell value to the rowData array
    rowData.push(cellValue);
  });
  // Merge the values in rowData and separate them by commas
  var rowDataAsString = rowData.join(',');
  // Prepare the data to send in the POST request
  var requestData = {
    prompt: `analyze this data ${rowDataAsString}`, // Use the merged string here
    apiKey: '<APIkey>', // Replace with your API key
  };
  // Send the data to the API (replace the URL with your OpenAI API endpoint)
  fetch('http://localhost:3000/completion', {
    method: 'POST',
    headers: {
      'Content-Type': 'application/json',
    },
    body: JSON.stringify(requestData),
  })
    .then(function (response) {
      return response.json();
    })
    .then(function (data) {
      // Log the API response
      console.log(data);
    })
    .catch(function (error) {
      // Handle any errors that occur during the fetch
      console.error('Error:', error);
    });
})();

Agora vamos executar nossa macro e ver como funciona!

Exemplo de planilha financeira:

Exemplo de planilha de funcionários:

Esperamos que os insights compartilhados nesta postagem do blog possam contribuir para uma maior eficiência no trabalho. Incentivamos você a explorar e implementar nossos vários métodos de API em seu trabalho diário.

Se você tiver alguma dúvida ou ideia criativa, sinta-se à vontade para compartilhe-os conosco. Estamos abertos e entusiasmados com a possibilidade de colaboração. Boa sorte em seus empreendimentos exploratórios!