Utiliza la macro de ONLYOFFICE para analizar los datos de una hoja de cálculo

13 septiembre 2023By Sergey

Aunque ChatGPT 4 ofrece ahora funciones mejoradas, algunos usuarios siguen prefiriendo ChatGPT 3.5 debido a su menor coste. Sin embargo, ChatGPT 3.5 carece de capacidades de carga de archivos, lo que impide a los usuarios analizar las hojas de datos. En esta entrada del blog vamos a demostrar cómo crear una macro de ONLYOFFICE que supera esta limitación, lo que te permitirá analizar hojas de cálculo utilizando la API de OpenAI.

Utiliza la macro de ONLYOFFICE para analizar los datos de una hoja de cálculo

Acerca de la macro

Para evitar esta limitación, nuestra macro sigue los siguientes pasos:

  1. Recoge los valores de las celdas seleccionadas de una hoja de cálculo.
  2. Compila estos valores en una matriz.
  3. Convierte esta matriz en una cadena.
  4. La envía mediante una solicitud fetch a un servidor proxy Node.js.
  5. El servidor recupera la matriz del cuerpo de la solicitud.
  6. A continuación, utiliza la biblioteca de OpenAI para enviar una solicitud de API a OpenAI.
  7. Una vez recibida la respuesta, el servidor la envía de vuelta a la macro dentro de un objeto de respuesta.

Para obtener las instrucciones detalladas sobre la configuración del servidor proxy, incluido el código completo, consulta nuestra entrada del blog que muestra cómo crear una macro para rellenar hojas de cálculo con los datos de OpenAI.

¡Ojo! Por favor, ten en cuenta que esta macro es más adecuada para tablas de tamaño medio, normalmente alrededor de 50 filas, debido a la limitación de tokens del modelo ChatGPT 3.5 de 4096 tokens.

Creación de la macro

En primer lugar, recuperamos el rango seleccionado actualmente en una hoja de cálculo:

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

A continuación creamos una matriz vacía llamada rowData para almacenar los datos que se recogerán de las celdas seleccionadas:

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

Iteramos a través de cada celda en el rango seleccionado usando un bucle ForEach. Para cada celda, recuperamos su valor utilizando el método GetValue y luego añadimos ese valor a la matriz 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);
  });

A continuación, convertimos los valores recogidos en la matriz rowData en una única cadena en la que los valores están separados por comas:

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

Creamos un objeto llamado 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
  };
  • El campo prompt incluye la cadena combinada de los valores de celda para el análisis.
  • El campo apiKey contiene la clave API utilizada por el servidor Node.js para autenticar las solicitudes fetch entrantes.

A continuación, utilizamos la función fetch para enviar una solicitud POST a la URL especificada:

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

Gestionamos la respuesta de la API convirtiéndola primero a formato JSON, registrando los datos en la consola e implementando la gestión de errores en caso de que haya algún problema con la solicitud 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);
    });

El código completo de la macro es el siguiente:

(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);
    });
})();

Ahora, ¡ejecutemos nuestra macro para ver cómo funciona!

Ejemplo de una hoja de datos financieros:

Ejemplo de una hoja con los datos de empleados:

Esperamos que las ideas compartidas en esta entrada del blog puedan contribuir a una mayor eficiencia en el trabajo. Te animamos a que explores y pongas en práctica nuestros distintos métodos de la API en tu trabajo diario.

Si tienes alguna duda o idea creativa, no dudes en compartirla con nosotros. Estamos abiertos y muy interesados en la posibilidad de colaborar. Te deseamos mucha suerte en tus esfuerzos exploratorios.