Utiliza la macro de ONLYOFFICE para copiar hojas de cálculo

9 noviembre 2023By Sergey

Editar hojas de cálculo puede ser complicado, especialmente cuando manejas varias hojas de cálculo con datos similares. Para facilitarte el proceso, vamos a crear una macro que copie datos de una hoja de cálculo a otra y te ayude a manejar grandes hojas de cálculo con facilidad.

Utiliza la macro de ONLYOFFICE para copiar hojas de cálculo

Creación de la macro

Primero, accedemos a la hoja actual en el editor. Después accedemos a la hoja a la que queremos copiar en la variable pastesheet, siguiendo la variable oRange que especifica el rango con el que queremos trabajar.

  const oWorksheet = Api.GetActiveSheet();
  const pastesheet = Api.GetSheet("Sheet2");
  const oRange = oWorksheet.GetRange("A1:C10");
  // If you want to copy a specific Selection to the new sheet
  // var oRange = oWorksheet.GetSelection();

Ojo: Si quieres trabajar con una selección, utiliza en su lugar el método GetSelection() descomentando la línea anterior.

A continuación, usamos el método for each en el rango especificado para iterar a través de cada celda del rango.

oRange.ForEach(function (range) {

Utilizando el parámetro range en la función callback, accedemos a los datos de cada celda, empezando por la primera.

  const oValue = range.GetValue();
  const oCharacters = range.GetCharacters(0, 2);
  const oFont = oCharacters.GetFont();
  const fontName = oFont.GetName();
  const oSize = oFont.GetSize();
  const isBold = oFont.GetBold();
  const isItalic = oFont.GetItalic();

En el método ForEach, primero extraemos el valor de la celda. A continuación extraemos los caracteres iniciales del valor para conocer sus parámetros como negrita, cursiva y etc. Luego obtenemos el fontName, seguido del tamaño de la fuente, para implementarlos en la nueva hoja.

if (oValue === null || oValue === "") {
      pastesheet.GetRange(range).SetValue(" ");
    }

Antes de colocar los valores en la nueva hoja, ejecutamos algunas comprobaciones utilizando bucles if else para asegurarnos de que las celdas vacías se representan correctamente en la nueva hoja, como se muestra arriba.

else {
      oFont.SetName(fontName);
      pastesheet.GetRange(range).SetValue(oValue);
      pastesheet.GetRange(range).SetFontName(fontName);
      pastesheet.GetRange(range).SetFontSize(oSize);
      oWorksheet.GetRange(range).AutoFit(false, true);
      if (isBold) {
        pastesheet.GetRange(range).SetBold(true);
      }
      if (isItalic) {
        pastesheet.GetRange(range).SetItalic(true);
      }
    }

Por último, en el bucle else colocamos los valores en sus celdas correspondientes y, a continuación, damos a esas celdas sus propiedades, como negrita, cursiva, nombre de fuente y tamaño de fuente.

Macro completa

Aquí está el código completo de la macro:

(function () {
  const oWorksheet = Api.GetActiveSheet();
  const pastesheet = Api.GetSheet("Sheet2");
  const oRange = oWorksheet.GetRange("A1:C10");

  // If you want to copy a specific Selection to the new sheet
  // var oRange = oWorksheet.GetSelection();

  oRange.ForEach(function (range) {
    const oValue = range.GetValue();
    const oCharacters = range.GetCharacters(0, 2);
    const oFont = oCharacters.GetFont();
    const fontName = oFont.GetName();
    const oSize = oFont.GetSize();
    const isBold = oFont.GetBold();
    const isItalic = oFont.GetItalic();
    if (oValue === null || oValue === "") {
      pastesheet.GetRange(range).SetValue(" ");
    } else {
      oFont.SetName(fontName);
      pastesheet.GetRange(range).SetValue(oValue);
      pastesheet.GetRange(range).SetFontName(fontName);
      pastesheet.GetRange(range).SetFontSize(oSize);
      oWorksheet.GetRange(range).AutoFit(false, true);

      if (isBold) {
        pastesheet.GetRange(range).SetBold(true);
      }
      if (isItalic) {
        pastesheet.GetRange(range).SetItalic(true);
      }
    }
  });
})();

Algunos puntos clave que debes recordar:

  1. Asegúrate de que el nombre de la hoja que especifiques en la macro existe, y preferiblemente es una hoja en blanco.
  2. Asegúrate de ejecutar la macro desde la hoja principal (la hoja primaria), y no desde la hoja recién creada.

Vamos a ejecutar nuestra macro para ver cómo funciona.

Este es otro ejemplo de funcionamiento de la macro con el método GetSelection():

Esperamos que la macro sea una gran herramienta en tus tareas diarias para la edición de hojas de cálculo.

No pierdas la oportunidad de aprovechar el poder de la API de ONLYOFFICE. Nuestra amplia biblioteca de métodos API es tu llave para transformar tus ideas en realidad. Si tienes alguna pregunta o concepto innovador, te recomendamos que lo compartas con nosotros. Tus aportaciones son muy valoradas, y nos entusiasma la posibilidad de colaborar contigo. Te deseamos mucha suerte en tus esfuerzos exploratorios.