[RESUELTO]Insertar Imagen en tabla desde Writer con VB6

Desarrollo de Macros y programación en UNO, usar las API, llamar programas externos...
Responder
Satuple82
Mensajes: 11
Registrado: Jue May 20, 2010 4:09 am

[RESUELTO]Insertar Imagen en tabla desde Writer con VB6

Mensaje por Satuple82 »

Hola soy nuevo en este Foro... mi problema es que en una aplicacion hecha en Visual Basic 6 estoy manejando OOo 3.1 y estoy manejando Writer para insertar una imagen en una tabla, el problema es que la imagen es mas grande que la Celda de la tabla y se desconfigura, me gustaria saber como hago para que la celda donde inserto la imagen automaticamente tome el tamaño de la imagen... aqui está el código que utilizo en mi aplicación... con anterioridad abro el documento asi:

Código: Seleccionar todo

    ' Creación del servicio OpenOffice
    Set ServiceManager = CreateObject("com.sun.star.ServiceManager")
    'Se inicia la funcion CoreReflection que es usada mas tarde para crear estructuras
    Set objCoreReflection = ServiceManager.CreateInstance("com.sun.star.reflection.CoreReflection")
    Set Desktop = ServiceManager.CreateInstance("com.sun.star.frame.Desktop")
    'crear documento   añadir ==> Array(MakePropertyValue("Password", ""))
    Set Document = Desktop.loadComponentFromURL(Ruta_Plant, "_blank", 0, Array(MakePropertyValue("Password", "SAPOS")))
Luego invoco esta Sub:
Public Sub Manejo_de_Filas()
    Dim flag_insertar As Boolean
    Dim Itera As Integer
    Dim S2 As String
    Dim aSize As Object    'Objeto para la Huella Dactilar
    Dim oCelda As Object    'Objeto para la Huella Dactilar
    Dim oTabla As Object   'Objeto para la Huella Digital
    Dim oTexto As Object   'Objeto para la Huella Dactilar
    Dim oCursor As Object   'Objeto para la Huella Dactilar
    flag_insertar = False
    Itera = 0
    Set Tabla = TextTables.getByName("WWT1")
    Set Filas = Tabla.GetRows
    NombresCelda = Tabla.getCellNames()
    cx = ""
    For i = 1 To MAT(J, 6) 'Hasta número de imagenes o textos
        cx = MAT(J, G + i) 'Texto a insertar
        Set Celda = Tabla.getCellByName(NombresCelda(Val(5) 'La Celda donde insertare la imagen
        Set CursorCelda = Celda.createTextCursor()
        If InStr(cx, "bmp") > 0 Then 'si el texto trae referencia de una imagen BMP
            'Aqui para las pruebas de la Imagen
    '       Crear una Instancia del Objeto Gráfico para la Imagen
            Url_Img = Replace(Dir_G, "\Originales", "") & "hls\" & cx 'Ruta de donde está almacenada la imagen
            If FileExists(Url_Img) = False Then
                MsgBox "No Existe Imagen..."
            Else
                Url_Img = Replace(Url_Img, "\", "/")
                Url_Img = "file:///" & Url_Img
                Set oImagen = Document.CreateInstance("com.sun.star.text.GraphicObject")
                Set oTexto = Celda.GetText()
                Set aSize = oTexto.Bridge_GetStruct("com.sun.star.awt.Size")     'Reemplaza a Dim aSize As New ("com.sun.star.awt.Size")
                Set oCursor = oTexto.createTextCursorByRange(oTexto.getStart())
                Celda.String = "" 'Limpio la Celda
                oImagen.GraphicURL = Url_Img
                aSize.width = 2700
                aSize.height = 3200
                Call oImagen.setsize(aSize)
                Call oTexto.insertTextContent(oCursor, oImagen, True)
                oImagen.TextWrap = 1
'                Aqui necesito la instrucción para que la imagen haga que la Celda adopte su Tamaño...
            End If
        Else
            Celda.String = UCase(cx)
        End If
        'Aqui hago un manejo para que se inserten tantas Filas en la tabla como se requieran... una a una
        If Vector_Filas(N_F, 3, Val(M_Filas(5))) = "NO" Then
            If i < MAT(J, 6) Then
                If Itera = 0 Then
                    S2 = "A" & Mid(NombresCelda(Val(M_Filas(2))), 2)
                    Set Celda = Tabla.getCellByName(S2)
                    Set CursorCelda = Celda.createTextCursor()
                    If M_Filas(10) <> "" Then
                        Celda.String = M_Filas(10) & " " & Itera + 1
                    End If
                End If
                Call Filas.insertByIndex(KL, 1)    'Para insertar FILAS
                Itera = Itera + 1
                KL = KL + 1
                M_Filas(2) = Val(M_Filas(2)) + Val(M_Filas(3))
                NombresCelda = Tabla.getCellNames()
                'Aqui me ubico en la Primer Celda de la Fila para escribir el contenido
                'que se repite cuando se inserta una Fila para los valores en la Plantilla
                S2 = "A" & Mid(NombresCelda(Val(M_Filas(2))), 2)
                Set Celda = Tabla.getCellByName(S2)
                Set CursorCelda = Celda.createTextCursor()
                If M_Filas(10) <> "" Then
                    Celda.String = M_Filas(10) & " " & Itera + 1
                End If
            End If
            flag_insertar = True
        Else
            M_Filas(2) = Val(M_Filas(2)) + Val(M_Filas(3))
        End If
    Next i
    If flag_insertar = True Then
        flag_insertar = False
        Vector_Filas(N_F, 3, M_Filas(5)) = "SI"
        Vector_Filas(N_F, 2, M_Filas(5)) = Itera
        Vector_Filas(N_F, 1, M_Filas(5)) = M_Filas(4)
    End If
End Sub
Espero me puedan Ayudar... por que en Writer... simplemente seria Click derecho sobre la imagen.... Ajuste => Ajuste de página Dinámico.... y se ajusta la celda a la Imagen..
Gracias...si no está clara la pregunta me avisan...
Última edición por mauricio el Mié Dic 18, 2013 6:36 pm, editado 2 veces en total.
Razón: Marcar icono de resuelto
OpenOffice 3.1 - Windows XP
Avatar de Usuario
mauricio
Mensajes: 6093
Registrado: Sab Nov 22, 2008 5:36 am
Ubicación: CDMX
Contactar:

Re: Insertar Imagen en tabla desde Writer con VB6

Mensaje por mauricio »

Hola...

No se como tengas configurada tu plantilla, pero de forma predeterminada, cuando insertas una imagen en una celda, la fila se ajusta automáticamente, en la siguiente imagen inserté una imagen en la celda A1 por código, observa como se ajusto la altura de la fila:
imagen01.png
imagen01.png (5.32 KiB) Visto 4330 veces
En la siguiente imagen, inserte la misma imagen, pero cuatro veces más grande, de nuevo, la altura de la fila se ajusto automáticamente, no así el ancho de la columna, que esta si podría ajustarse por código...
imagen02.png
Si te es posible anexa un imagen de como te queda y como la quieres para ayudarte con más precisión...

Saludos
______________________________________________
"Todo cuanto no podemos dar nos posee". - André Gide
LibreOffice 6.2 | ArchLinux | Gnome3
No respondo preguntas privadas, por favor, usa el foro
Satuple82
Mensajes: 11
Registrado: Jue May 20, 2010 4:09 am

Re: Insertar Imagen en tabla desde Writer con VB6

Mensaje por Satuple82 »

Gracias Mauricio por tu ágil y rápida ayuda... te cuento que el problema es realmente que como debía insertar no solo imagenes, si no que iba insertando filas y al tiempo insertaba una o varias imagenes en las nuevas celdas... pues te cuento que de tanto probar y probar... encontre la siguiente instrucción que automaticamente me cuadra la imagen dentro de la celda: oImagen.adjust = 3 ======>>> es esta instrucción... que la verás al final de esta parte de código...
Url_Img = Replace(Url_Img, "\", "/")
Url_Img = "file:///" & Url_Img
'Crear una Instancia del Objeto Gráfico para la Huella Dactilar
Set oImagen = Document.CreateInstance("com.sun.star.text.GraphicObject")
Set oTexto = Celda.GetText()
Set aSize = oTexto.Bridge_GetStruct("com.sun.star.awt.Size") 'Reemplaza a Dim aSize As New ("com.sun.star.awt.Size")
Set oCursor = oTexto.createTextCursorByRange(oTexto.getStart())
oImagen.GraphicURL = Url_Img
aSize.width = 2700
aSize.height = 3200
Call oImagen.setsize(aSize)
Call oTexto.insertTextContent(oCursor, oImagen, True)
oImagen.TextWrap = 1
oImagen.adjust = 3 ======>>> es esta instrucción...

Gracias... espero le sirva a alguien...
OpenOffice 3.1 - Windows XP
Responder