Shell 03-11-2021, 12:05
Buenos días!

En el curso hemos dado una iniciación a las macros para Open Office usando OOo Basic  ó LibreOffice Basic
y macros con VBA para M$ Office. Usamos Calc y Excel.

Los dos temas eran prácticamente similares. Solo cambiaba la suite y el sistema operativo.
Como sabéis OOo Basic y LibreOffice Basic están basado en Visual Basic.

Me gustaría preguntaros que os parece el editor de macros de las suites libres en comparación con las de M$ Office ya que 
lo que me ha parecido es que el editor de macros de LibreOffice es muy sencillo.

A la hora de necesitar programar usando VBA desde la suite de M$ Office se me complicó un poco para obtener una versión de
prueba de Office 365.  Hay una que es online pero no soporta macros y la de pruebas tienes 30 días y luego te cobran 90€.
Que tienes que dar datos que no me dio la gana de dárselos a M$. Ademas es obligatorio crear una cuenta con ellos.

Al final tuve que instalar una versión antigua en una máquina virtual, pirata lógicamente, cosa que no me gusta, la Office XP ( debe ser del 2002 )
No soy partidario de usar software privativo en la educación. Me repatea.

Intenté probar con la suite WPS 2019 que es muy parecida a Office, pero no encontré la posibilidad de usar macros.
El problema es que tenía que usar Office si o si. LibreOffice Basic tiene un modulo de VBA.
No sé si la doble intención era ver esa "comparación" de los editores.

Algo que si me parece extraño que Visual Basic no incorpore una característica de auto completado al escribir instrucciones.
Eso en parte es algo molesto.

El lenguaje OOo Basic

Programación con LibreOffice Basic

Excel Avanzado. Introducción a las macros.

Saludos
tincho 02-11-2021, 22:16
[Imagen: mTnbk3E.png]
Hola amigos.
Bueno en este espacio intentare ir poniendo proyectos con la RB3, de momento no dispongo de una placa del modelo 3 o 2, solo tengo la 4
Si alguien tiene una Raspberry pi 2 o 3 y tiene tiempo y ganas de hacer una prueba me vendría bien saber si Fedora 35 server funciona en alguna de estas SBC.
Sucede que hoy intente instalar Fedora 35 en una Raspberry pi 4 a pesar de que se indica en la documentación que no funciona, por si en una de esas, la documentación estaba obsoleta, pero no lo estaba Angry
¿Y por que intente instalar Fedora en la RP4? porque es una de las pocas distros que soporta FreeIPA, ya saben el "Active directory" de Linux y quería probar si era posible.
https://docs.fedoraproject.org/en-US/qui...pberry-pi/
Bueno gracias de antemano por si algún o alguna valiente se animan a probar el tema.
Nota: si alguien tiene otra idea para FreeIPA con otro tipo de hardware de bajo costo comente.
1 Saludo.
Grandamakulo 31-10-2021, 13:39
A raíz de hacer una plantilla para redactar guiones de historietas que se adaptase a mi forma de trabajar, pensé que debía añadirle una herramienta que permitiese hacer un diagrama de viñetas sin necesidad de gastar la, más o menos, hora por cada 15-18 páginas.
La cuestión planteada en  https://gambas-es.org/showthread.php?tid=645  venía al caso para poder hacer un diagrama de viñetas que ayudase al dibujante «víctima» del guionista de turno. Esto es, el «escribidor» realiza un guion con la plantilla y ésta, de manera automática, fabrica un esquema de viñetas. Para tal propósito son necesaria dos cosas:
  1. Que las páginas y las viñetas estén formateadas con los párrafos correspondientes.
  2. Que el texto de las viñetas indique el tamaño y posición según el método sugerido por Peio Soria.
Este método es muy simple. Como explico en https://www.faneo.es/forum/forum/guion-y...1068#11068, En su manual «Mi guion de cómic», que está para bajar libremente en pdf desde su página, Peio Soria describe el que, para mí, es el método más lógico y sencillo. Se trata de emplear unas fracciones en vertical y en horizontal, de la manera 2/3Vx2/4H, por ejemplo. ¿Cómo se interpretaría? Fácil, 2/3V significa que se toma el segundo de los tres tercios posibles de la división vertical de la página, esto es, columnas. Además se toma el segundo de las cuatro posibles partes de división horizontal, filas, de la página. Superponiendo ambos, resulta la viñeta que queremos indicar.
[Imagen: Vi-etas-de-Peio.png]
Para abarcar varias partes en el caso de alguna viñeta más irregular o una que ocupe toda unidad, se pueden emplear nomenclaturas especiales.
Véase un ejemplo de cómo queda escrito:
[Imagen: 2021-10-31-12-15.png]

De esta manera, al ejecutar la macro, se obtiene:
[Imagen: Esquema-Vinetas.png]
Documento que ya se puede enviar para que el dibujante pueda interpretar más fácilmente lo que dice el guionista y, después,... hacer lo que le venga en gana  Tongue .
Además, la macro permite:
  1. Solapamiento de viñetas —como en la página 37 del ejemplo—.
  2. Cambio INMEDIATO de formato de página —apaisado, vertical, A5, B5, cuadrado, fanzine...— con sólo introducir un número.
  3. Detecta errores en la nomenclatura e indica el lugar en el que se produce.
  4. Se le ha añadido un apéndice de estadísticas que permite ver, aparte de las palabras y caracteres que ya indica el programa con «contar palabras», el número de páginas del cómic, el número bruto de viñetas y el número de bocadillos.
A esta macro, después de pelearme mucho, muchísimo, más todavía, con los mal documentados y dispersas especificaciones del UNO de Star BASIC —al menos así le pareció a éste, su humilde servidor—, logré terminarla en una versión más o menos útil:
Código:
REM  *****  BASIC  *****

' DIBUJAR ESQUEMAS PARA GUION DE HISTORIETAS Y ESTADÍSITCAS.
'    SOFTWARE LIBRE
'    --------------
'    
'    Grandamakulo, 2021
'    grandamakulo@gmail.com
'    
'    * Puedes:
'    Distribuirlo
'    Modificarlo
'    Regalarlo
'    Si te place, acredítame
'    
'    * No puedes:
'    Cobrar por él o por sus variaciones directas
'    Si quieres hacerlo, ponte en contacto conmigo
'    —Hay muchas fundaciones a las que ayudar—
'    
'    * Garantías:
'    Estás de guasa, ¿no?
'    Si se te funde la lavadora o se te hace un 
'    desconchón en la pared, soluciónalo tú.
'    
'    ESTE PROGRAMA CONSIDERA LAS TRES --O CUATRO--
'    LEYES DE LA ROBÓTICA. Más o menos.


Option Explicit
Const Si As Boolean = True
Const No As Boolean = False
Const sC As String = """"
Const sA As String = "'" 

Sub DibujaEsquema()
    ' A partir de los datos del formato de página que introduce el usuario,
    ' del número de páginas y de la información que el usuario ha establecido
    ' en el tipo de párrafo viñeta, se dibuja en SVG —y se guarda en el mismo
    ' directorio que el Documento— un ESQUEMA DE VIÑETAS.
    
    Dim oDoc As Object            'Documento actual
    Dim oEnu As Object            'Partes del documento actual
    Dim oTex As Object            'Un elemento texto de oEnu
    Dim iPag As Integer            'Número de página
    Dim iVin As Integer            'Número de viñeta en cada página
    
    Dim oSitio As Object
    
    Dim _iRel As Double            'Relación entre alto y ancho
    Dim _iAnM As Double            'Ancho de marco = 210,0224103814 mm eq A4
    Dim _iAlM As Double            'Alto del marco = _iAnt * _iRel
    Dim _iCaM As Double            'Ancho de calle marco  = 5 mm
    Dim _iCaP As Double            'Ancho de calle página = 5 mm
    Dim _iCaV As Double            'Ancho de calle viñeta = 2 mm
    Dim _iAnP As Double            'Ancho de página
    Dim _iAlP As Double            'Alto de página
    Dim _sCoM As String            'Color marco
    Dim _sCoP As String            'Color página
    Dim _sCoB As String            'Color borde viñeta
    Dim _sCoV As String            'Color viñeta
    Dim _iAnB As Double            'Ancho borde viñeta
    Dim _sFuP As String            'Fuente página
    Dim _iFTP As Integer        'Tamaño fuente página
    Dim _sFuV As String            'Fuente viñeta
    Dim _iFTV As Integer        'Tamaño fuente viñeta
    
    Dim iXM  As Double            'Coordenada X origen del marco actual
    Dim iYM  As Double            'Coordenada Y origen del marco actual
    Dim iXP  As Double            'Coordenada X origen de la página actual
    Dim iYP  As Double            'Coordenada Y origen de la página actual
    Dim iXV  As Double            'Coordenada X origen de la viñeta actual
    Dim iYV  As Double            'Coordenada Y origen de la viñeta actual
    Dim iAnV As Double            'Ancho de la viñeta actual
    Dim iAlV As Double            'Alto de la viñeta actual
    
    Dim iKK  As Byte
    Dim iFil As Byte
    Dim iCol As Byte
    Dim iVis As Variant
    
    Dim Paso As String            'Variable comodín
    
    Dim tSVG As String            'Cadena SVG resultado
    
    On ERROR GOTO Errr
    
    'Tamaño y orientación de la página
    Paso="A4 vertical: " & sqr(2) & Chr(13)
    Paso=Paso & "A4 Horizontal: " & 1/sqr(2) & Chr(13)
    Paso=Paso & "Cuadrado:      " & 1 & Chr(13)
    Paso=Paso & "O un número cualquiera como proporción entre alto y ancho."
    _iRel=InputBox(Paso, "Formato", sqr(2))
    if _iRel<=0 then end
    Paso=""
    
    'Iniciar variables de color, forma y fuentes
    _sCoM="#000080"'"#000000FF"
    _sCoP="#FFFFFF"
    _sCoB="#008080"
    _sCoV="#00FFFF80"
    _iAnB=2
    _sFuP="Liberation Mono"
    _sFuV="Liberation Mono"
    _iFTV=16
    _iFTP=72
    
    _iAnM= 210.0224103814*3.779527559055
    _iAlM=_iAnM*_iRel
    _iCaM=5
    _iCaP=5
    _iCaV=1
    _iAnP=(_iAnM-3*_iCaP)/4
    _iAlP=(_iAlM-5*_iCap)/4
    
    tSVG="<svg version=" & sC & "1.1" & sC & " xmlns=" & sC & "http://www.w3.org/2000/svg" & sC 
    tSVG=tSVG & " xmlns:xlink=" & sC & "http://www.w3.org/1999/xlink" & sC & ">"
    
    'Primer marco
    iXM=0
    iYM=0
    tSVG=tSVG & RectSVG(iXM, iYM, _iAnM, _iAlM, _sCoM) & Chr(13)
    
    oDoc=ThisComponent
    oEnu=oDoc.Text.createEnumeration
    
    While oEnu.hasMoreElements
        oTex=oEnu.nextElement
        If oTex.supportsService("com.sun.star.text.Paragraph") Then
            
            If oTex.ParaStyleName=("CC_Página") Then
                iPag=iPag+1
                iVin=0
                '¿Marco nuevo? A dibujarlo
                iKK=iPag MOD &H10
                If iKK=0 Then
                    iYM=0
                    iXM=(iPag \ &H10)*(_iAnM+_iCaM)
                    tSVG=tSVG & RectSVG(iXM, iYM, _iAnM, _iAlM, _sCoM) & Chr(13)
                End If
                'Dibuja la página
                Paso = iPag
                iCol=iKK MOD 4
                iFil=iKK \ 4
                iYP=iYM+_iCaP+(_iCaP+_iAlP)*iFil
                iXP=iXM+_iCaP+_iAnP*iCol+((iCol+1) MOD 2)*_iCap
                tSVG=tSVG & RectSVG(iXP, iYP, _iAnP, _iAlP, _sCoP,"1","#000000",_sFuP, _iFTP, "gray",Paso) & Chr(13)
            End If
            If oTex.ParaStyleName=("CC_Viñeta") Then
                iVin=iVin+1
                'Dibuja la viñeta
                'Interpreta posición y tamaño
                iVis=SoriaVin(oTex.String, Str(iPag & "." & iVin))
                iYV=iVis(0,0)*_iAlP+iYP
                iXV=iVis(1,0)*_iAnP+iXP
                iAnV=iVis(1,1)*_iAnP
                iAlV=iVis(0,1)*_iAlP
                Paso=iPag & "." & iVin
                tSVG=tSVG & RectSVG(iXV, iYV, iAnV, iAlV, _sCoV, "1", _sCoB, _sFuV, _iFTV,"gray",Paso) & Chr(13)
            End If
                    
        End If
    Wend
    tSVG=tSVG & "</svg>"
    GlobalScope.BasicLibraries.loadLibrary("Tools")
    GuardaArchivo(tSVG, Tools.Strings.DirectoryNameoutofPath(oDoc.URL, "/") & "/EsquemaVinetas.svg")
    'Print tSVG
    MsgBox("¡Terminado!")
    Exit Sub
Errr:
    Reset
    MsgBox("Numeración incorrecta en la viñeta: " & iPag & "." & iVin & Chr(13) & oTex.String)

End Sub

Sub CuentaVinetas()
    'Cuenta páginas, bocadillos y viñetas por tipo de párrafo y lo muestra en un mensaje 
    Dim oDoc As Object
    Dim oEnu As Object
    Dim oTex As Object
    Dim iPag As Integer
    Dim iVin As Integer
    Dim iBoc As Integer
    
    Dim Paso As String
   
    oDoc=ThisComponent
    oEnu=oDoc.Text.createEnumeration
    
    While oEnu.hasMoreElements
        oTex=oEnu.nextElement
        If oTex.supportsService("com.sun.star.text.Paragraph") Then
            If oTex.ParaStyleName=("CC_Viñeta")    Then iVin = iVin+1
            If oTex.ParaStyleName=("CC_Página")    Then iPag = iPag+1
            If oTex.ParaStyleName=("CC_Bocadillo") Then iBoc = iBoc+1
        End If
    Wend
     Paso = "Páginas:    " & iPag & Chr(13)
     Paso = Paso & "Viñetas:    " & iVin & Chr(13)
     Paso = Paso & "Bocadillos: " & iBoc
 
    MSGBOX (Paso, 64, "Estadísitcas")
 
End Sub

Private Function RectSVG (iX As Double, iY As Double, iAnc As Double, iAlt As Double, sFondo As String, Optional iBorde As Double, Optional sBorde As String, Optional sFuente As String, Optional iTam As Integer, Optional sColor As String, Optional tTexto As String) As String
    'Genera un texto SVG con un rectángulo y un texto dentro.
    Dim Paso as String
    'Posición
    Paso=Paso & "<rect x=" & sC & Int(iX) & sC & " y=" & sC & Int(iY) & sC 
    'Tamaño
    Paso=Paso & " width=" & sC & Int(iAnc) & sC & " height=" & sC & Int(iAlt) & sC
    'Color
    Paso=Paso & " style=" & sC & "fill:" & sFondo
    'Borde, si se le añade
    If Not IsMissing(sBorde) Then
        Paso=Paso & ";stroke:" & sBorde & ";stroke-width:" & iBorde & "px"
    End If
    Paso=Paso & sC & "/>" & Chr(13)
    
    If Not IsMissing(tTexto) Then
        'Texto, si se le añade
        'Fuente
        Paso=Paso & "<text font-family=" & sC & sFuente & sC & " font-size=" & sC & iTam & sC & " fill=" & sC & sColor & sC
        'Posición
        Paso=Paso & " x=" & sC & Int(iX+iAnc/2) & sC & " y=" & sC & Int(iY+iAlt/2) & sC
        'Centrar
        Paso=Paso & " text-anchor=" & sC & "middle" & sC & " alignment-baseline=" & sC & "center" & sC
        'Texto
        Paso=Paso & ">" & tTexto & "</text>"
    End If
    
    RectSVG=Paso
End Function

Private Sub GuardaArchivo(tTexto as String, sRuta as String)
    Dim iLibre as Integer
    sRuta = ConvertToUrl(sRuta)
    iLibre = FreeFile
    Open sRuta For Output As #iLibre
    Print #iLibre,tTexto
    Close #iLibre
End Sub

Private Function SoriaVin(sTex As String, Donde As String) As Variant
    
    Dim sGGG As String        'Texto Soria en mayuúsculas y sin espacios
    Dim sMMM() As String    'Matriz para tratar el texto
    Dim sTTT() As String    'Submatriz
    Dim iPX (0 To 1, 0 To 1) As Double '0 Hor ;1 Ver | 0 Origen; 1 Ancho
    Dim iPA (0 To 1, 0 To 2) As Double '0 Hor ;1 Ver | 0 Desde; 1 Hasta ; 2 De
    Dim i   As Byte            'Contador
    Dim k     As Byte            'Contador
    
    sGGG = Ucase(Trim(sTex))
    if Not IsNumeric(Left(sGGG,1)) Then
    'Si no comienza por número, viñeta a toda página
        sGGG="1/1VX1/1H"
    End If
    sMMM=Split(sGGG," ")
    sGGG=sMMM(0)
    sMMM=Split(sGGG,"X")
    If Ubound(sMMM)=0 Then
        Redim Preserve sMMM(0 To 1)
        if Instr(sMMM(0),"V") Then sMMM(1)="1/1H" Else sMMM(1)="1/1V"
    End If
    For i=0 To 1
        sGGG=sMMM(i)
        If InStr(sGGG,"H") Then k=0 Else k=1
        sGGG=Left(sGGG,Len(sGGG)-1)
        sTTT=Split(sGGG, "/")
        iPA(k,2)=sTTT(Ubound(sTTT))
        sTTT=Split(sTTT(0),"-")
        If Ubound(sTTT)=1 Then
                iPA(k,0)=sTTT(0)
                iPA(k,1)=sTTT(1)
            Else
                iPA(k,0)=sTTT(0)
                iPA(k,1)=sTTT(0)
        End If
        iPX(k,0)=(iPA(k,0)-1)/iPA(k,2)
        iPX(k,1)=(iPA(k,1)-iPA(k,0)+1)/iPA(k,2)
    Next i
    
    SoriaVin=iPX
End Function
Archivos adjuntos
.zip
Plantilla_KK_macro.ott.zip (Tamaño: 18.05 KB Descargas: 1)
Páginas (557):    1 352 353 354 355 356 557   
Bienvenido, Invitado
Tienes que registrarte para poder participar en nuestro foro.
Recordarme?
Miembros: 286
Último miembro: Emilio Uribe
Temas del foro: 1,720
Mensajes del foro: 8,935
Últimos temas
Archivos .ods
Foro: General
Último mensaje por: tincho, 01-07-2025, 18:54
Respuestas: 8 - Vistas: 276
Publicidad
Foro: Sobre gambas-es.org
Último mensaje por: tincho, 01-07-2025, 18:48
Respuestas: 6 - Vistas: 333
Web con gambas, a ver si ...
Foro: WebApp/WebForms
Último mensaje por: tincho, 01-07-2025, 17:47
Respuestas: 41 - Vistas: 32,607
Un sistema de ayudas cont...
Foro: Videotutoriales
Último mensaje por: guizans, 22-06-2025, 19:55
Respuestas: 3 - Vistas: 311
Powered By MyBB, © 2002-2025 MyBB Group.
Made with by Curves UI.