Cómo crear y ejecutar una macro en LibreOffice Calc en Linux

LibreOffice es la respuesta del mundo de FOSS a la Microsoft Office Suite patentada y convencional. Desarrollado por los principales desarrolladores y colaboradores de software de productividad de Office, ofrece un reemplazo completo para Microsoft Office en múltiples sistemas operativos.

La aplicación LibreOffice equivalente a Microsoft Excel se llama LibreOffice Calc. Viene con una serie de funciones y una interfaz similar a Excel. Tiene un motor de macros incorporado para desarrollar y ejecutar macros para la automatización. Sin embargo, no es compatible con Visual Basic, pero admite su propio idioma; LibreOffice Basic, para programar macros.

La suite LibreOffice viene preinstalada en la mayoría de las distribuciones de Linux, incluidas Ubuntu, Debian, Fedora y CentOS.

Creación y ejecución de una macro en LibreOffice Calc

Primero, creemos una hoja de trabajo con algunos datos de muestra.

Para abrir el organizador de Macros, vaya a Herramientas »Macros» Organizar macros »Conceptos básicos de LibreOffice. Abrirá el Macros Básicas de LibreOffice ventana como se muestra en la captura de pantalla a continuación.

Ingrese un nuevo nombre para la macro, luego haga clic en el botón Nuevo en la parte inferior derecha de la ventana.

Ahora debería ver la pantalla del editor de macros en LibreOffice Basic.

Como podemos ver, las macros creadas manualmente se crean de forma predeterminada en “Mis macros y diálogos -> Estándar -> Módulo1”.

Actualmente hay dos macros presentes: una es Principal, que es una macro vacía predeterminada, y otra es prueba, la macro que creamos arriba. Ahora mejoraremos la macro de prueba.

Nuestra macro realizará las siguientes tareas:

  • Compruebe que todas las personas tienen profesión de escritor.
  • Crea una nueva hoja
  • Mover todas las entradas para escritores en una nueva hoja

A continuación se muestra nuestra macro:

Subprueba rem Mueve las entradas con Profesión Writer a una nueva hoja dim crs (8) como objeto dim j como Integer dim prof como objeto dim i como Integer dim sh como objeto dim sh2 como objeto sh = ThisComponent.Sheets (0) crs (0) = sh.getCellRangeByPosition (0, 0, 3, 0) j = 1 para i = 1 a 5 x = 1 prof = sh.GetCellByPosition (3, i) rem Almacenar la fila completa en la variable Si prof.string = "Writer" Entonces crs (j) = sh.getCellRangeByPosition (0, i, 3, i) j = j + 1 End If next i rem Ahora crea una nueva hoja y escribe estos datos allí ThisComponent.Sheets.insertNewByName ("Writers", 1) sh2 = ThisComponent.Sheets (1) i = 0 Do While not IsNull (crs (i)) sh2range = sh2.getCellRangeByPosition (0, i, 3, i) sh2range.setDataArray (crs (i) .getDataArray) i = i + 1 Sub de final de bucle

Déjame explicarte la macro anterior sección por sección.

Subprueba. . . End Sub

prueba es el nombre de nuestra macro, por lo tanto, en el código, se denota como Subprueba (sub = subrutina). De manera similar, terminamos este código macro con una declaración End Sub. Tenga en cuenta que estas declaraciones se agregan automáticamente cuando creamos una macro desde el menú, aunque el usuario puede escribir directamente el código de la macro aquí y el nombre de la subrutina se considerará como el nombre de la macro.

movimiento rápido del ojo 

Todos los comentarios en LibreOffice Basic comienzan con la palabra clave movimiento rápido del ojo. Una línea completa que comience con rem se considera un comentario. Otra forma es usar ' (coma simple invertida) al comienzo de la línea.

dim crs (8) como objeto dim j como Integer dim prof como objeto dim i como Integer dim sh como objeto dim sh2 como objeto

Esta es una declaración de variable en LibreOffice Basic. La sintaxis general es tenue como . Para declarar una matriz, use una sintaxis similar a la variable crs, donde 8 es la longitud de la matriz.

sh = ThisComponent.Sheets (0) crs (0) = sh.getCellRangeByPosition (0, 0, 3, 0) j = 1

ThisComponent se refiere al documento actual. En este caso, se trata de una hoja de cálculo de cálculo. Cargamos Hoja con índice 0, es decir, la primera hoja, en variable sh. También hay funciones para cargar una hoja usando el nombre.

A continuación llamamos a la función getCellRangeByPosition del objeto sh y cárguelo en la matriz crs. Rango de celdas se refiere a un grupo de celdas en la hoja según la posición.

Tenga en cuenta que los argumentos, 0, 0 (columna 0, fila 0) denota la celda inicial del rango, y 3, 0 (columna 3, fila 0) denota la celda final del rango. Por lo tanto 0, 0, 3, 0 se refiere a la primera fila (encabezado) de nuestra hoja de muestra.

para i = 1 a 5 x = 1 prof = sh.GetCellByPosition (3, i) rem Almacenar la fila completa en la variable Si prof.string = "Writer" Entonces crs (j) = sh.getCellRangeByPosition (0, i, 3, i ) j = j + 1 Fin Si sigue i

Usamos un por declaración para recorrer las filas. El por el bloque termina con un Siguiente instrucción, que incrementa la variable i al final de cada iteración.

Luego llamamos a una función GetCellByPosition del objeto sh. Pasamos parámetros (3, i), es decir, con cada iteración, el objeto de la celda en la columna 3 y la fila i se recupera en la variable prof.

Entonces usamos un Si declaración para comprobar si el valor en la celda prof es "Writer". Si es así, volvemos a llamar a la función getCellRangeByPosition, esta vez, con I en lugar del número de fila inicial y final. Nuevamente lo almacenamos en la matriz. crs.

ThisComponent.Sheets.insertNewByName ("Writers", 1) sh2 = ThisComponent.Sheets (1)

Primero creamos una nueva hoja con nombre Escritores, en la posición 1, que es la segunda posición, ya que el índice comienza en 0. Luego obtenemos un objeto de esta hoja recién creada, de modo que podamos ingresar los datos de los escritores en esta hoja.

i = 0 Hacer mientras no es IsNull (crs (i)) sh2range = sh2.getCellRangeByPosition (0, i, 3, i) sh2range.setDataArray (crs (i) .getDataArray) i = i + 1 Loop

El Hacer mientras La declaración de bucle se usa cuando queremos hacer un bucle en función de las condiciones, en lugar de hacerlo en un rango de valores enteros, para lo cual use use por como se mostró anteriormente. Aquí, hacemos un bucle hasta crs (i) No es nulo.

A continuación, volvemos a llamar getCellRangeByPosition de una manera similar a la anterior para obtener un objeto de rango en la nueva hoja.

Finalmente, llamamos a dos funciones: getDataArray que devuelve los datos de crs (i), es decir, una fila de datos (sobre un escritor) de la primera hoja; y escribimos estos datos en el rango de celdas en una nueva hoja usando setDataArray.

Finalmente, guarde la macro de Archivo »Guardar todo opción.

Para ejecutar la macro, vaya a Herramientas »Macros» Ejecutar macro y seleccione su macro del directorio "Mis macros" en la biblioteca del selector de macros. Haga clic en el Correr después de seleccionar un nombre de macro.

Ejecutar la macro anterior en nuestra hoja de cálculo de muestra produce el siguiente resultado.

Esta es la forma de crear macros en LibreOffice. Para obtener más información y opciones, consulte la documentación oficial.

? ¡Salud!