Mostrando entradas con la etiqueta Ofimática. Mostrar todas las entradas
Mostrando entradas con la etiqueta Ofimática. Mostrar todas las entradas

martes, 17 de junio de 2025

Datos. Python.

Módulo ezodf (Calc)


Para trabajan con documentos Excel disponemos de la biblioteca Openpyxl y para trabajar con Calc del módulo ezodf (1). Este módulo está menos desarrollado que el anterior, pero nos sirve para un manejo básico de archivos sencillos.


Igual que sucede con Openpyxl, también deberemos instalar el módulo ezodf mediante el instalador pip (pip install ezodf) y después importarlo en nuestro script (import ezodf).

Con este módulo podemos hacer unas cuantas cosas, algunas de las cuales son accesibles en forma de ejemplos desde GitHub (2), pero no me voy a detener demasiado en esto ya que la utilidad inmediata que le veo a este paquete, igual que a otros de tipo ofimático, es facilitar la automatización de tareas, y escribir en Calc desde Python no me resulta especialmente atractivo.

Me limitaré entonces a mostrar como acceder a un archivo Calc y leer datos de sus celdas. Es una tarea muy simple pero muy interesante, ya que nos va a permitir acceder a nuestros documentos Calc y a los datos que contienen para trabajar con ellos de diferentes maneras (3)

Veamos a continuación un pequeño script Python:

import ezodf

# Lectura del archivo ODS
documento = ezodf.opendoc('AlumLS.ods')

#Acceso a la hoja Datos 1 (la segunda, en este caso)
hoja_datos = documento.sheets[1]

#Acceso a la celda A1
celdaA1 = hoja_datos['A1'].value

#Mostrar contenido de la celda
print(celdaA1)

Como podemos ver este script no tiene ningún misterio y no es muy diferente del que podemos crear con la misma función mediante Openpyxl. De hecho la función clave opendoc() es muy simple e intuitiva y el resto del procedimiento tampoco se puede considerar novedoso: vamos descendiendo desde el documento hasta la celda y una vez en este nivel, nos apropiamos de su contenido (4) para asociarlo a una variable que después podemos manipular en función del objetivo que persigamos.

No corresponde ahora realizar este tipo de desarrollos, pero en entradas posteriores mostraré alguna de estas posibilidades.

NOTAS

(1) Muy recomendable consultar la [página del proyecto]
(2) Especialmente ver [documentación y ejemplos]
(3) En concreto estoy pensando en el acceso masivo a datos y la creación de procedimientos de análisis mediante bibliotecas especializadas de Python; pero también en cuestiones más simples, como la automatización de la creación de documentos Excel a partir de documentos Calc. Hasta donde yo se, no existe una biblioteca que convierta directamente un tipo de documento en el otro y por desgracia, los módulos Python tanto de acceso a datos como de manipulación y análisis de los mismos están diseñados para trabajar con formatos Excel.
(4) Importante observar que debemos especificar que accedemos al valor o dato almacenado en la celda. Para ello añadimos al identificador de la celda el atributo value (hoja_datos['A1'].value)

martes, 1 de abril de 2025

Evaluación. Python.

Modelo Python ofimático

Sirva este proyecto (que aquí se inicia) como explicitación de que existen diversas alternativas para alcanzar el mismo (o similar) objetivo: en este caso, automatizar el proceso de evaluación.


En realidad el objetivo que me planteo es menos ambicioso y ligeramente diferente, ya que no aspiro a mayor nivel de automatización que el conseguido hasta este momento con OOo Basic [ver modelo docap], pero sí a mostrar diferentes desarrollos que son posibles con Python y sus módulos o bibliotecas orientadas al uso de servicios ofimáticos (esta vez del paquete MSO-A), lo que permite desarrollar enfoques no previstos en OOo Basic, incluyendo la creación automática de un presentación como recurso de devolución de información a colectivos.

Pero como el camino tiene cierto recorrido, no es conveniente abordarlo en una única entrada, por lo que esta servirá únicamente como presentación del pequeño conjunto que sigue y para identificar los tres procedimientos que me planteo desarrollar aquí:
  • Solución pensada como recogida de datos de un registro único y en un único momento.
  • Solución pensada como creación de un registro individual de datos a concretar en dos procedimientos complementarios.
  • Y solución orientada a la creación de una base de datos simple.
Explicaré cada una de estas opciones en sus respectivas entradas.

sábado, 22 de marzo de 2025

Python. Recursos.

Biblioteca OpenPyXL

Esta biblioteca es a las hojas de cálculo (Excell - Calc) lo que python-docx es a los documentos de texto. Con esto queda dicho lo fundamental que vamos a tratar en esta entrada, aunque sea necesario dar algún que otro detalle más. A ello vamos.



Y eso más que vamos a decir empieza por indicar que necesitamos instalar la biblioteca desde Símbolo del sistema mediante la instrucción pip install openpyxl. Posteriormente podremos consultar su documentación en esta página., aunque también podemos basarnos en otras más sencillas para una introducción a lo fundamental de su manejo. Esta página podría servir para tal fin.

Para trabajar con los módulos que componen la biblioteca openpyxl podemos utilizar esta instrucción (import openpyxl) que importa el módulo al completo, o utilizar este otro tipo de instrucciones (from openpyxl import workbook) que nos permite trabajar con funciones y atributos específicos, como en este caso, que permite ejecutar las principales y básicas instrucciones para automatizar el trabajo con hojas de cálculo.

Al tratarse del trabajo con hojas de cálculo, debemos tener en cuenta que nos interesa tanto crear y trasladar datos a la hoja de cálculo (input) como acceder a los datos grabados en una hoja de cálculo, dado que ésta cumple funciones de base de datos. Esto, trasladado al estudio del código básico que desarrollaremos en las entradas que siguen (empezando por ésta), implica centrar la atención en los dos procedimientos básicos: crear una hoja de cálculo como fuente de datos y acceder a los datos contenidos en esa base de datos. Parece novedoso (y lo es por comparación con python-docx y python-pptx), pero en realidad no es nada que no hayamos hecho ya trabajando con OOo Basic.


Textos. Python

Ofimática con Python


Dentro de las muchas utilidades que nos ofrece Python, las más próximas a los objetivos nucleares de este blog son las que tienen que ver con la ofimática. Aunque existen diferentes enfoques, mi opción actual tiene que ver con la creación automatizada de los principales documentos ofimáticos en términos de uso por parte de los SEO: documentos de texto, hojas de cálculo y presentaciones.



Aunque LibreOffice (LO) presenta la opción de crear y trabajar con script Python "internos", esto es, script con igual funcionalidad que los creados en OOo Basic, hasta donde yo sé, Python no cuenta con bibliotecas que permitan crear documentos LO "externamente", esto es, sin que sea necesario trabajar desde un servicio de la suite. Microsoft Office (MSA) sí, lo que constituye una ventaja a su favor. No obstante es factible crear documentos MSA y seguir trabajando con la suite LO, ya que ésta accede sin dificultad a los documentos creados para la primera.

Dentro de los productos ofimáticos, los de mayor uso (y funcionalidad) para los SEO son los documentos de texto, seguidos a mucha distancia y escasa entre ellos, por las hojas de cálculo y las presentaciones (tipo Power Point). Python cuenta con bibliotecas específicamente desarrolladas para automatizar la creación de estos documentos en soporte MSA.

Podemos automatizar la creación de documentos de texto (Word - Writer) mediante las utilidades que ofrece la biblioteca python-docx, crear hojas de cálculo (Excell - Calc) mediante openpyxl y generar automáticamente presentaciones mediante python-pptx (Power Point - Impress)
 

domingo, 1 de diciembre de 2024

Textos. Automatización

Automatización de textos

La creación de documentos es fundamental en el trabajo de los SEO; lo es por múltiples causas y de forma abrumadoramente predominante en nuestro trabajo: cerca del 80% consiste en crear, completar y cumplimentar documentos, muchos ellos de carácter prescriptivo, esto es: obligatorios en su forma y contenido.



Posiblemente no debiera ser así  y sería un buen indicador de cambios de modelo de intervención que dejara de serlo, al menos que se redujera significativamente el porcentaje anterior. Aun con todo, no veo ni posible, ni conveniente que el trabajo con documentos deje de consumir una parte importante de nuestro tiempo y esfuerzo, ya que va asociado a nuestras funciones y al carácter público y justificado que tiene. Incluyo en esto el carácter prescriptivo de muchos documentos como expresión de la formalización de los procesos y su publicitación. La alternativa no tiene por qué constituir necesariamente un avance, siendo, por el contrario, muy probablemente un retroceso en calidad, pero sobre todo en claridad.

Sin profundizar más en estas no tan simples como aparentan cuestiones, diremos que la buena noticia es que disponemos de recursos para reducir la carga de trabajo que la cumplimentación de esta abundante documentación produce, con el consecuente ahorro de tiempo y las consecuencias positivas que todos deseamos deriven de ello. Me refiero, como es de esperar, a los procedimientos que derivan en la automatización del trabajo con documentos.

En realidad este planteamiento tiene poco de novedoso, ya que hace tiempo ya que se buscan soluciones en esta dirección, y avances se han hecho, incluso cuando las tecnologías no ayudaban mucho. El cambio real (e importante) es precisamente que ahora las tecnologías sí ayudan y las "soluciones" están al alcance de todos en forma de competencia ofimática, esa de la que ya hable [en otro momento] insistiendo en que era necesario desarrollar esta dimensión de la competencia digital de los SEO, en función de la especificidad de sus funciones y prácticas profesionales.

Desde esta competencia ofimáticas, esto es, sin necesidad de salirse del conocido mundo de las suites ofimáticas, es posible crear soluciones funcionales que nos permiten alcanzar, al menos parcialmente, el objetivo de la semi-automatización del trabajo con los documentos, con la mayoría  de los documentos con que trabajamos, y muy especialmente con los que antes califiqué de prescriptivos por venir dados como de obligado uso por parte de la Administración educativa. De hecho, cuanto más formalizados estén los documentos, más viable es su automatización.

Como digo estas posibilidades están a nuestra disposición desde hace tiempo en forma de funcionalidades (Combinar correspondencia y Grabar macro), pero también con lo que aportan lenguajes de programación como OOo Basic o como PythonDe todo esto va esta sección.

jueves, 23 de mayo de 2024

Textos. Python.

Uso externo de Python para crear documentos


Después de exponer el esquema general, voy a continuar por explicar cómo entiendo el modo externo (1), y más concretamente la subdivisión que aprecio dentro de lo que en ese esquema identifiqué como modo 1A.



Dentro de éste considero necesario diferenciar entre lo que es crear un archivo de texto plano, que puedo identificar con extensión .txt, pero también como .doc, .odt o cualquier otra compatible con los procesadores de texto (Word y Writer, para ser más concretos), aunque siguen siendo archivos de texto plano (a esto llamo modo 1A1), de lo que supone crear archivo doc, xls o dpf en sentido estricto (modo 1A2).

El primero modo (1A1) es en realidad una forma de "engañar" a Writer para que acceda directamente al archivo odt (también puede acceder a doc, como ya sabemos), para poder trabajar con él, aunque también puede hacerlo con un archivo txt sin mayor problema.

Mediante el segundo modo (1A2)  creamos archivos "originales" MSO o Acrobat, no archivos de texto plano, y tanto doc como xls son accesibles a LO-Writer/Calc, pero por la compatibilidad de LO, no por efecto de Python. Además, en este caso (1A2), para crearlos necesitamos trabajar en Python con paquetes (librerías) específicos (from... import) que previamente deberemos haber instalado (pip install).

Dejamos (de momento) 1A2 y nos centramos en la forma más simple (realmente muy simple) de crear documentos accesibles desde LO-Writer. Y digo bien, ya que este modo no es funcional para crear archivos compatibles con LO-Calc (posible sí, pero no funcional).

Habrá que diferenciar dos momento o fases dentro de esto modo 1A1:

  • La fase (A) de creación del archivo (de momento, para más detalle, ver  las entradas de ARCHIVO en este mismo blog) mediante script Python
  • Y la base (B) de trabajo con el archivo desde LO-Writer.
En sentido estricto no podemos decir que estemos generando un docap, no al menos en la forma en que lo hemos creado hasta ahora mediante OOo Basic; pero no por ello deja de ser una forma sencilla de utilizar Python como alternativa a OOo Basic, aunque yo diría que más que alternativa, complementaria.

Complementaria porque también OOo Basic, bien como macro (funcionalidad Grabar macro), bien como script, resulta, no imprescindible pero sí conveniente para llegar a un resultado que podemos considerar equivalente a la automatización de documentos mediante OOo Basic (docap). Eso sí, con una limitación: debemos ceñirnos a trabajar con texto plano, sin elementos gráficos (vg. tablas), al que opcionalmente podemos dar formato desde LO-Writer con macros.

Y digo con macros porque me atrevo a ir un poco más allá en recomendaciones: en el momento actual de mis conocimientos planteo como más adecuado complementar el proceso con el uso de macros en vez de script; es mucho más sencillo e igual de funcional, por lo que nos será mucho más fácil crear este tipo de recursos.

Manteniendo este principio de funcionalidad y sencillez, en el momento actual, para los primeros desarrollo del modo 1A1 planteo usar la consola (símbolo del sistema en Windows) como recurso input. Esto nos ahorra la complejidad que implica la creación e implementación de una GUI (vg., basada en TkInter) y permite que nos centremos en la lógica de programación. Además el uso del cmd (consola) es perfectamente coherente con la simplicidad que buscamos y a la que debemos aspirar como profesionales ajenos a la programación profesional, aunque usuarios competentes de un lenguaje de programación que priorizan la funcionalidad frente al diseño. 

Este enfoque es similar al que observo en profesionales de otros campos (la medicina, el derecho, las ingenierías...) que también priorizan en el uso de Python (también de OOo Basic) la sencillez y la funcionalidad sobre el diseño. Creo que esto va en sentido lo contrario a lo que entiendo se busca desde determinados enfoques del desarrollo competencial docente: frente al consumidor de productos que supone la apuesta de la Administración por los lenguajes de autor, la  competencia que facilita el pensamiento computacional que promueve el aprendizaje y uso de un lenguaje de programación orientado al logro de objetivos profesionales relevantes.

Dado que lo creado hasta el momento es muy básico (no busco ahora utilidad alguna) será suficiente con que accedas al script Python, y a la macro de LO (1)


NOTA 1. En realidad se trata de un archivo .txt que deberás descargar y copiar en el IDE de LibreOfficeMis_macros_y_diálogos.

Textos. Python.

Python desde dentro de LibreOffice


No hace mucho descubrí un vídeo en Youtu.Be en el que se explicaba que Excel había incorporado Python como lenguaje de macros. Creí que se trataba de un vídeo de una (¿nueva?) biblioteca que permitía generar documentos Excel desde Python, pero no: se trataba del uso de Python como lenguaje "interno" para crear funciones. Este video data del 30 de agosto de 2023 y hace referencia a una nueva funcionalidad de Excel, así que es novedad. ¡Qué cosas! LibreOffice dispone de esta misma funcionalidad, para todos sus servicios desde que tengo memoria de haberlo utilizado, y de eso ya van unos cuantos años...


No quiero decir con esto que la implementación de Python en Excel funcione exactamente igual que como funciona en LibreOffice, ya que, al parecer el objetivo es mucho más concreto y posiblemente el resultado sea también más funcional, pero resulta cuanto menos curioso que MSO-Excel "copie" una funcionalidad disponible en LibreOffice (genérico), disponiendo como se dispone de librerías específicas que permiten a Python trabajar con y para Excel (también para Word, como hemos identificado en el modo 1A2 en nuestro esquema. Algo tiende de específico y especial  este modo que en ese mismo esquema denominé Modo interno 2B.

Si por algo se caracteriza este modo es precisamente por su similitud con las formas de uso de OOo Basic, sin duda el lenguaje de "macros" preferente de LO (igual de lo es VBA para MSO), así que Python se presente como alternativa a VBA desde Excel viene a corroborar lo que Maurico Baeza ya planteó hace tiempo respecto a LO: la utilidad de Python para extender las funcionalidades de LO, derivada de la versatilidad y potencia del lenguaje.

Esto no implica que OOo Basic pase a ser obsoleto, ya que, hoy por hoy sigue presentando (a mi entender) varias ventajas respecto a Python, por lo que (opino (1)) es conveniente seguir aprendiendo y trabajando con OOo Basic en sus dos formas (2): a partir de Grabar macro y directamente desde el IDE creando script.
  • De facilidad de aprendizaje.
  • De facilidad de generación, incluyendo la funcionalidad Grabar macro, no disponible para Python.
  • Y la facilidad de aplicación o uso de las macros o script, que se concreta en una mayor capacidad de integración en los servicios LO.
Parece ser que la posibilidad de utilizar Python desde (dentro de ) LibreOffice no hay que darla por echa, siendo necesario comprobar que es posible mediante un sencillo procedimiento que consiste en lanzar una "macro" desde un documento Writer (yo hablaré de script) de comprobación (3):
  • Desde Herramientas | Macros | Ejecutar macro->
  • Selector de macros -> Biblioteca "Mis Macros" ->
  • Carpeta "HolaMundo-> script HelloWorldPython -> Ejecutar
Si se escribe en el documento el texto "Hello World (in Python)" es que tienes Python disponible como lenguaje de "macros". En caso contrario deberás realizar los cambios pertinentes en la configuración de LibreOffice, pero si trabajas desde Windows es poco probable que no esté ya correctamente configurado.

Superada la primera dificultad  toca ahora afrontar la segunda: si estás acostumbrado a trabajar con OOo Basic te sorprenderán las dificultades para gestionar los script Python, ya que sólo es posible ejecutar los que están disponibles desde Mis Macros o desde Macros de la aplicación, pero no parece posible crear y grabar script propios en ninguna de las tres ubicaciones conocidas (añadiendo a las dos anteriores el propio documento).

Existen modos de sortear estas dificultades (4), pero por el momento me voy a limitar a explicar una sencilla solución: sigue esta ruta de acceso y grabar los script de Python...

C:\Users\NombreUsuario\AppData\Roaming\LibreOffice\4\user\scripts\python (5)

... que estarán después accesibles desde Mis Macros. Este directorio es accesible desde Herramientas/Macros/Ejecutar macro o desde Herramientas/Macros/Organizar macros/Python, que son también las formas más simples de ejecutar un script.

Bien, ya sabemos cómo activar un script Python desde LO-Writer (por ejemplo) y cómo guardar los que creemos nosotros, pero aun  nos queda aprender a crearlos.

En efecto, sabemos que podemos crearlos desde el IDE de Python, y que podemos guardarlos en la ubicación que indica la dirección antes mostrada, incluso visualizarlos desde un documento (por ejemplo, desde Writer), pero no será reconocido sin más por LO como archivo válido si no cumple determinadas condiciones. Esto es lo que ocurre con el script que creamos para trabajar el modo 1A1...

print("¿Cómo te llamas?")
nombre=input()
print(f"Me alegro de conocerte,{nombre}")

... que podemos guardar y visualizar, pero al que no podemos acceder desde Writer -> (...) Ejecutar | Organizar macro.

Vamos a ver cuáles son esas condiciones que hacen posible el funcionamiento de un script Python llamado desde un servicio LO; y para ello nada mejor que explorar un ejemplo de script Python ubicado en ese subdirectorio, ya que sabemos que funciona, por ejemplo, mismamente HelloWorldPython.

Si abrimos este archivo desde Bloc de notas (por simplificar), obtenemos un documento cargado de líneas comentadas (#) que por el momento podemos obviar, así que el script, sin comentarios, queda como sigue:

def HelloWorldPython():

    desktop = XSCRIPTCONTEXT.getDesktop()
    model = desktop.getCurrentComponent()

    if not hasattr(model, "Text"):
        model = desktop.loadComponentFromURL(
            "private:factory/swriter", "_blank", 0, ())

    text = model.Text
    tRange = text.End
    tRange.String = "Hello World (in Python)"
    return None

Por comprobar que todo funciona correctamente, podemos probar a guardar este archivo libre de comentarios con un nombre alternativo al original (HelloWorldBis.py) y comprobar sí funciona llamándolo desde Writer (Herramientas | Macros | Organizar macros | Python). Como es de esperar el resultado es positivo: se escribe en el documento la esperada frase Hello World (in Python).

Ya tenemos, pues, un script que no es reconocido y otro que sí y podemos ver que se diferencian en que en el segundo se utilizan instrucciones específicas, que sabemos forman parte de las propias de una librería especialmente diseñada en LO para hacer posible el uso de Python llamada PyUNO.
  • desktop.getCurrentComponent()
  • desktop.loadComponentFromURL("private:factory/swriter", "_blank", 0, ())
Algunas de ellas no te resultarán extrañas, dada su similitud con las empleadas en OOo Basic, otras son específicas de PyUNO:
  • XSCRIPTCONTEXT.getDesktop()
He ahí una cuestión importante: si podemos utilizar Python desde LO es porque desde Python empleamos una librería específica, imprescindible que poder hacerlo. Esto es similar a lo que hacemos desde el modo 1A2 para crear documentos word o excel, como señalo en otra entrada (6)

Para finalizar esta entrada, y aunque queda mucho por aclarar, paso a exponer el código de un script elaborado por mí a partir del código de los que se presentan como ejemplo. Incluye líneas de comentario para facilitar su comprensión.

def texto_en_python():
#Imprime un texto en un documento Writer situando el cursor al final del mismo.
   saludador = "Javier"
    texto_saludo = f"Saludos cordiales de parte de {saludador}, desde Asturias.\n"
  texto_contenido = f"Este escrito realizado por {saludador} es parte de un proyecto de aprendizaje del uso de python en LO\n"
   texto_explica = f"En este caso se trata de generar información textual en soporte writer desde cualquier servicio de LO"
    texto = texto_saludo + texto_contenido + texto_explica
#Llamada a la aplicación de texto de LibreOffice
    desktop = XSCRIPTCONTEXT.getDesktop()
    model = desktop.getCurrentComponent()
#Entra en acción si la aplicación activa no es Writer
#En ese caso deriva a la creación de un nuevo documento writer
    if not hasattr(model, "Text"):
        model = desktop.loadComponentFromURL("private:factory/swriter", "_blank", 0, ())
    text = model.Text       #Llama a la subclase Text del componente actualmente activo
    tRange = text.End       #Ubica el puntero al final del documento
#Y escribe el contenido de la variable (podría escribir directamente un string)
    tRange.String = texto

LibreOffice cuenta con otros ejemplos de código Python que son de interés para comprender las posibilidades del uso "interno" este lenguaje en la creación de script, así que en futuras entradas trabajaremos sobre estos ejemplo.

NOTAS

(1) Propongo que al menos hasta alcanzar un nivel de competencia asimilable al que podemos haber adquirido en OOoBasic, que se manifieste en ser capaces de generar soluciones basadas en Python similares a los docap creados mediante OOoBasic. Es un límite asequible y fácilmente comprobable, por lo que no supone una generalidad inconcreta.
(2) Eso que en el esquema  se denomina modo interno 2A
(3) Creo que se explica en el vídeo de Mauricio Baeza que enlacé antes.
(4) Incluyendo la instalación de extensiones que se pretenden simplificadoras de todas estas limitaciones (como la extensión APSO), pero son estos temas suficientemente complejos como para que lo más prudente en estos momentos iniciales los dejemos aparcados. Tiempo habrá de tratarlo más adelante.
(5) Users puede aparecerte directamente como Usuarios y debes sustituir NombreUsuario por tu verdadero nombre de usuario. Además es posible que cuando llegues a este punto no encuentres visible la carpeta AppData (no confundir con la nombrada como Application Data); esto es debido a que está oculta. En ese caso vas al menú Vista y activas la casilla  Elementos ocultos. A partir de ahí puedes seguir la ruta indicada tanto para acceder a los script ya creados como para copiar los que tu crees, en principio desde el IDE que proporciona Python por defecto, desde el mismo bloc de notas o desde cualquier programa de edición de código (Thonny, por ejemplo, por empezar por uno sencillo).
(6) Ese modo de trabajo externo no ha sido explicado aun, dado que en este momento he priorizado la simplicidad a la secuencia de la categorización del esquema. Para mayor conocimiento de estos recursos acceder a la documentación de Foundation Wiki y la ayuda de LibreOffice y los enlaces a otros documentos que contienen estas dos referencias

miércoles, 24 de abril de 2024

OOo Basic.

Características del lenguaje OOo Basic

Aunque todos los lenguajes de programación tienen, en lo básico, mucho en común, OOo Basic (y también VBA) tiene características específicas que interesa conocer desde el inicio de su aprendizaje.



Este lenguaje procede del desarrollado para OpenOffice y se define como lenguaje de macros. Es fundamental entender lo que implica esta categorización, ya que, aunque la considero poco precisa y hasta cierto punto confusa, resumen lo que OOo Basic tiene de específico (insisto: también VBA): es un lenguaje para trabajar desde dentro de las suites OpenOffice y LibreOffice, desde cada uno de sus servicios (Writer, Calc...), como recurso para automatizar procedimientos.

Dentro de eso que se ha venido en llamar competencia digital docente, más específicamente en lo que se refiere a la lógica de programación competencia (un tanto olvidado, como ya tuve ocasión de [comentar]) y más en concreto aun en lo referido a la competencia ofimática ([ver al respecto]), el conocimiento orientado a la práctica de un lenguaje como OOo Basic nos permite hacer un uso mucho más potente y eficiente de unos recursos que (para los SEO) son fundamentales.

Fundamentales por la propia naturaleza de nuestras funciones y del trabajo cotidiano. Y fundamentales también por el ahorro de tiempo que supone lo que deriva de ese conocimiento: la posibilidad de automatizar los procedimientos de trabajo y la creación documental que conllevan. Esto viene a ser equivalente a decir incremento de la competencia ofimática.

El lenguaje OOo Basic aporta, por tanto, ciertas ventajas, aunque también presenta limitaciones que no tienen otros lenguajes de propósito general, no "encerrados" en la suite ofimática (1). Pero ahora me interesa destacar algunas de las innegables ventajas que, en mi opinión, hacen que merezca la pena trabajar con él:
  • Usar OOo Basic (2) implica incrementar exponencialmente el aprovechamiento del conocimiento de los servicios de las suites ofimáticas. Dicho de otra forma, no partimos de cero, y estos conocimientos previos suponen tener andado un buen trecho del camino.
  • En relación con lo anterior, los resultados que podemos obtener con OOo Basic son directamente aprovechables desde los propios servicios, con independencia de cuáles sean éstos y de la frecuencia y familiaridad de uso que tengamos de ellos (3)
  • Las habilidades que se adquieren en el uso de funcionalidades de cierta complejidad se ven potenciadas con el conocimiento y uso de OOo Basic. La relación entre ambos (funcionalidades avanzadas y creación de script) es bidireccional: ambas se potencian, aunque puedan considerarse alternativas.
Podemos resumir todo lo anterior diciendo que OOo Basic como parte que es de la suite LibreOffice complementa y potencia sus funcionalidades, transformando lo que son simples documentos en una especie de aplicación o programa que, además de automatizar la generación de contenidos, incorpora procesos de análisis de datos de cierto nivel de complejidad, tanto como necesitemos o seamos capaces de desarrollar.

La ventaja para el profesional son evidentes: es él mismo el que, desde su conocimiento profesional y de sus específicas necesidades, desarrolla un recurso orientado a proporcionarle ayuda. Es por eso que, aunque podemos enmarcar el uso de OOo Basic dentro del desarrollo de la competencia ofimática, en realidad se supera ampliamente esta delimitación, ya que se adentra en el conocimiento y uso funcional de las habilidades de programación.

Cierto es que nada es gratis, y en este caso se requiere conocimiento del lenguaje. A ello está dedicado este apartado.

NOTAS

(1) Me refiero, por ejemplo, a Python. No es éste un tema que me interesa desarrollar ahora, ya que tiempo y espacio habrá para navegar por esos mares.

(2) O VBA para los que opten por MSO, que en esto del lenguaje no hay mucha diferencia de funcionalidad, aunque si de código, como también de servicios. La apuesta de la Administración educativa asturiana por los servicios de Microsoft no es un secreto. Sus razones tendrá, pero ni el precio ni la utilidad, ni siquiera la versatilidad pueden ser argumentos a favor de esta opción.

(3) Constato reiteradamente que la frecuencia de uso, por si misma, no permite incrementar el nivel de conocimiento que se tiene de ellos. Y lo que es igualmente limitante: los servicios realmente utilizados se limitan al procesador de texto y, muy en segundo lugar, de los servicios de creación de presentaciones. Las hojas de cálculo y no digamos las bases de datos son, en la práctica, auténticos desconocidos. Considero que esto evidencia la insuficiencia de considerar que el uso genera por si mismo un incremento conocimiento de las funcionalidades de las herramientas y consecuentemente un mayor aprovechamiento. Siendo esto así (y lo es), se hace aun más necesaria una formación específica sobre duchas funcionalidades, incluyendo la propia y específica sobre los mal llamados "lenguajes de macros". 

sábado, 7 de octubre de 2023

Actuaciones

Comunicación con familias

Sabemos que esta medida de escolarización combinada supone una carga de trabajo muy importante. La mayor no es la de tipo burocrático, aunque no es desdeñable y bueno será todo lo que la alivie, como este docap de comunicación de las decisiones de la Comisión de Seguimiento a las familias cuando se producen determinados cambios o se prevén determinadas actuaciones,

Tanto por derecho como por conveniencia, la comunicación de la Comisión de Seguimiento de la Escolarización Combinada con las familias es fundamental para el correcto funcionamiento de esta medida de respuesta educativa. Siendo como es una medida controvertida y sumamente compleja, cumplir escrupulosamente los procedimientos que se establezcan para hacer efectiva esta comunicación es de vital importancia.

Y contar con una ayuda que facilite el correcto desarrollo de este tipo de actuaciones siempre será de agradecer, especialmente si nos permite automatizar la generación de documentos, reduciendo la carga de trabajo que implica, sin pérdida de calidad y personalización de la intervención.

Este docap sirve para crear documentos de comunicación de medidas a las familias. Aunque la firma es la del/de la responsable del Equipo educativo del centro de escolarización, se pretende que sea empleado por la persona que presida la Comisión de Seguimiento de la Escolarización Combinada (supuestamente el orientador u orientadora del centro de escolarización), quien lo presentará a la firma al responsable de la Dirección del centro, dentro del proceso de traslado de información y tramitación de las medidas que se plantearon en el seno de dicha Comisión.

Aclaro que parto de que se cumple el principio de que el centro de escolarización (de matriculación, para entendernos), que define la modalidad de escolarización del alumno o alumna y la gestión de su expediente escolar, es el centro ordinario en E. Infantil y el específico en E. Primaria. Al menos, esto es lo que está establecido por norma administrativa en determinadas comunidades autónomas, y en este contexto planteo el funcionamiento del docap.

En él, por delimitar su contenido, se consideran tres tipos de posibles medidas genéricas: la evaluación psicopedagógica prescriptiva según prescripción normativa, la modificación de apoyos especializados y la modificación de los periodos de asistencia a cada uno de los centros. Cualquier otra circunstancia o decisión de la Comisión no está considerada, lo que obliga, en su caso, a modificar tanto el control específico del formulario de entrada de datos como el código de tratamiento de los mismos.

Formalmente este docap se configura como docap complejo; se basa en LO-Calc y genera un documento LO-Writer como salida. La gestión de este documento queda a decisión del usuario, tanto a nivel de configuración y formateo, como de cambio de formato; por ejemplo es posible convertirlo a .pdf después de darle el formato deseado.

Se elegido esta formulación del docap por la simplicidad de gestión de los datos Calc desde OOo Basic y la fácil solución que proporciona ese servicio en el empleo de formularios, pero también por la versatilidad que supone trabajar con documentos de texto: que son editables y permiten realizar las modificaciones que se consideren pertinentes, haciendo que el docap resuelva la composición del documento-base, pero sin condicionar su formulación definitiva.

Aunque la explicación del docap la traslado al [vídeo enlazado con esta entrada], parece pertinente analizar aquí la estructura de su código.


En él podemos observar los diferentes componentes del docap y sus interacciones: partiendo del formulario y la asignación de sus controles a determinadas celdas, se accede mediante código a ellas y, posteriormente se complementa la información necesaria mediante el tratamiento condicional de los datos recogidos. Con estos datos se componen los textos (párrafos) que se escribirán en un documento Writer que se ha creado previamente mediante el procedimiento OOo Basic correspondiente.

El uso del docap es, como siempre, muy simple:

  • Se cumplimenta el cuestionario en la hoja de cálculo (gestor)
  • Se hace clic en el botón de comando "crear documento", que da acceso al desarrollo del proceso.
  • En función de los datos que se aporten se deberán cumplimentar InputBox() complementarios. Se debe tener cuidado con la pulsación sobre el botón "Aceptar" de estos interfaces para evitar saltos indebidos que alteran el resultado final del docap.
  • Se genera un documento Writer con los datos que ha creado el script. Este documento puedes ser guardado directamente o dejarlo abierto y disponible para las manipulaciones que se desee, incluyendo formateo para presentación y exportación bien como archivo de texto editable (.odt o .doc/.docx) o como .pdf.
  • Una vez creado el documento (y si preferimos antes de ponernos a trabajar con él) borraremos el contenido de los campos del formulario Calc haciendo clic en el botón-comando correspondiente.
Las posibilidades de mejora son varias, empezando por sustituir el uso de InputBox() por cuadros de diálogo para complementar el interface gráfico de entrada de datos y siguiendo por simplificar el código y mejorarlo ahí donde es posible (y hay unas cuantas mejoras potenciales). Como en otras ocasiones, dejo al usuario y su pericia la realización de estas mejoras y me reservo los mismos derechos.

No obstante, te expongo ahora otra línea de mejora que no normalmente no se plantea, pero que es coherente y posible (y yo diría deseable) desde este enfoque que se defiende en este blog: ser capaz de crear herramientas personalizadas:
  • Dado que estamos hablando de logar un nivel competencial que nos permita crear herramientas personalizadas (por ahora desde las propias opciones que presentan las suites ofimáticas), ¿por qué no practica este mismo enfoque adaptando instrumentos como el presenta a las necesidades y realidades concretas de un centro?
  • Desde esta perspectiva te planteo que, al margen de que afrontes o no mejoras como las que insinúo antes, adaptes el docap a tus necesidades mediante la asignación de valores a determinadas variables para que no sea necesario solicitarlos mediante interface.
  • Si lo haces, debes tener en cuenta lo que esto implica para el funcionamiento conjunto del script, por lo que te lo planteo desde la seguridad de que tu actual nivel de conocimiento y capacidad así lo permite.