Insertar imagen con VB 6

Desarrollo de Macros y programación en UNO, usar las API, llamar programas externos...
Responder
ffdga
Mensajes: 2
Registrado: Mar Abr 03, 2012 8:38 am

Insertar imagen con VB 6

Mensaje por ffdga »

Buenos días, he estado buscando en el foro antes de postear por si a alguien le ocurría lo mismo que a mi y no he encontrado nada así que me disculpo por si estoy equivocada y no he ojeado bien los temas.

Resulta que necesito insertar una imagen en una celda de una hoja de Calc de OpenOffice y realmente no se como hacerlo, probé con el código de tu libro pero es para una Macro y da error en un proyecto de VB 6:

Código: Seleccionar todo

Function getImagen(RutaImagen As String) As Object
Dim oDoc As Object
Dim oPaginaDibujo As Object
Dim oImagen As Object
	
	oDoc = ThisComponent
	oPaginaDibujo = oDoc.getCurrentController.getActiveSheet.getDrawPage()	
	oImagen = oDoc.createInstance( "com.sun.star.drawing.GraphicObjectShape" ) 	
	oImagen.GraphicURL = RutaImagen
	oPaginaDibujo.add( oImagen )
	getImagen = oImagen
	
End Function

Sub Imagenes5()
Dim sRuta As String
Dim oImagen As Object
Dim oTam As New com.sun.star.awt.Size

	sRuta = SelecionarImagen()
	If sRuta <> "" Then
		oImagen = getImagen( sRuta )
		oTam.Width = 10000
		oTam.Height = 7500
		oImagen.setSize( oTam )
	End If
	
End Sub
El error me da en "ThisComponent", no está declarado . ¿Alguien podría orientarme un poco? Iré comentando los cambios que vaya realizando y si lo resuelvo.


Gracias por adelantado.
OpenOffice.org 3.3, Windows XP
FJCC-ES
Mensajes: 873
Registrado: Mié Mar 25, 2009 1:19 am
Ubicación: Colorado, USA

Re: Insertar imagen con VB 6

Mensaje por FJCC-ES »

Aquí esta una versión del código en VB.

Código: Seleccionar todo

Sub InsertarImagen()
Dim args()
Set ServiceManager = CreateObject("com.sun.star.ServiceManager")
Set Desktop = ServiceManager.createInstance("com.sun.star.frame.Desktop")
Set Document = Desktop.loadComponentFromURL("private:factory/scalc", "_blank", 0, args) 'crear un documento
Ruta = "file:///c:/imagen.jpg"
Set oImagen = getImagen(Document, Ruta)

Set oTam = ServiceManager.Bridge_GetStruct("com.sun.star.awt.Size")
oTam.Width = 10000
oTam.Height = 7500
oImagen.setSize (oTam)
End Sub

Function getImagen(oDoc, Ruta) As Object
Set oPaginaDibujo = oDoc.getCurrentController.getActiveSheet.getDrawpage()
Set oImagen = oDoc.createInstance("com.sun.star.drawing.GraphicObjectShape")
oImagen.GraphicURL = Ruta
oPaginaDibujo.Add (oImagen)
Set getImagen = oImagen
End Function
Estas lineas inician OOo desde VB.

Código: Seleccionar todo

Set ServiceManager = CreateObject("com.sun.star.ServiceManager")
Set Desktop = ServiceManager.createInstance("com.sun.star.frame.Desktop")

La linea

Código: Seleccionar todo

Dim oTam As New com.sun.star.awt.Size
de OooBasic ha cambiado a

Código: Seleccionar todo

Set oTam = ServiceManager.Bridge_GetStruct("com.sun.star.awt.Size")
ffdga
Mensajes: 2
Registrado: Mar Abr 03, 2012 8:38 am

Re: Insertar imagen con VB 6

Mensaje por ffdga »

FJCC-ES, te agradezco mucho la ayuda, me ha resultado muy útil pero me sigue dando un error en oPaginaDibujo.Add (oImagen) --> oPaginaDibujo no admite esa propiedad o método :(

P.D: Perdón por tardar en contestar pero he tenido una semana de vacaciones y estuve totalmente desconectada.
OpenOffice.org 3.3, Windows XP
Avatar de Usuario
mauricio
Mensajes: 6092
Registrado: Sab Nov 22, 2008 5:36 am
Ubicación: CDMX
Contactar:

Re: Insertar imagen con VB 6

Mensaje por mauricio »

Hola...

Recuerda que VB necesita "conocer" los objetos que intenta llamar, todos los objetos de OOo, VB no los "conoce", para "presentarlos", como ya te comento mi amigo, usas las líneas:

Código: Seleccionar todo

Set ServiceManager = CreateObject("com.sun.star.ServiceManager")
Set Desktop = ServiceManager.createInstance("com.sun.star.frame.Desktop")
Así, la función getImagen, "debes" de llamarla desde el procedimiento InsertarImagen, tal cual te lo muestra mi amigo. Muéstranos el código completo que estas usando para guiarte...

Saludos
______________________________________________
"Todo cuanto no podemos dar nos posee". - André Gide
LibreOffice 6.2 | ArchLinux | Gnome3
No respondo preguntas privadas, por favor, usa el foro
pedrito76
Mensajes: 78
Registrado: Jue Jul 08, 2010 3:02 pm

Re: Insertar imagen con VB 6

Mensaje por pedrito76 »

Hola yo tengo esta macro para inserta imagenes pero no me sale la imagen, porque? :crazy:

Código: Seleccionar todo

Sub InsertarImagen

Dim oSize as New com.sun.star.awt.Size

oDoc = ThisComponent
oSize.width = 3500
oSize.height = 3500

Sheet = oDoc.Sheets.getByIndex(2)

s = "com.sun.star.drawing.GraphicObjectShape"
oShape = oDoc.createInstance(s)

FileName = "C:\Users\amigos del tenis\Desktop"
FileURL = convertToURL(FileName)

Cell = Sheet.getCellByPosition(9,0) 'Celda G13
oShape.setSize(oSize)
oShape.GraphicURL = FileURL

Drawpage = Sheet.DrawPage
Drawpage.add(oShape)
oShape.setPropertyValue("Anchor", Cell)
End Sub


OpenOffice.org 3.2
FJCC-ES
Mensajes: 873
Registrado: Mié Mar 25, 2009 1:19 am
Ubicación: Colorado, USA

Re: Insertar imagen con VB 6

Mensaje por FJCC-ES »

Probé el código y funciona bien. Inserta la imagen en la celda J1 de Hoja3.
pedrito76
Mensajes: 78
Registrado: Jue Jul 08, 2010 3:02 pm

Re: Insertar imagen con VB 6

Mensaje por pedrito76 »

Y en que acción se la insertar :?:

a mi me sigue sin salir, me sale el cuadro de que es una imagen, pero no la imagen :ucrazy:
OpenOffice.org 3.2
FJCC-ES
Mensajes: 873
Registrado: Mié Mar 25, 2009 1:19 am
Ubicación: Colorado, USA

Re: Insertar imagen con VB 6

Mensaje por FJCC-ES »

¿Incluye el nombre del archivo la extensión? Por ejemplo,

Código: Seleccionar todo

FileName = "C:\Users\amigos del tenis\Desktop" 
es incorrecto. El nombre completo del archivo es algo como

Código: Seleccionar todo

FileName = "C:\Users\amigos del tenis\Desktop.JPG" 
rikatus
Mensajes: 5
Registrado: Vie Ago 31, 2012 4:14 pm

Re: Insertar imagen con VB 6

Mensaje por rikatus »

Buenos días a todos.

A ver si alguien me puede ayudar.

Estoy intentado insertar en una celda de una hoja de Calc de Oppenoffice, a traves de visual basic 6.0, lo consigo con los ejemplos que habeis dado aqui, pero si muevo el archivo de carpeta y los abro de nuevo la foto no aparece y en lugar a aparece el componenete con la ruta.

Bueno... lo que quiero saber es como se hace, guardar la imagen dentro del archivo en vez de guardar la ruta donde esta imagen, ya que si cambio alguno de sitio ya no se carga la imagen

Un saludo y gracias de antemano
OpenOffice 3.3 en Windows 7
FJCC-ES
Mensajes: 873
Registrado: Mié Mar 25, 2009 1:19 am
Ubicación: Colorado, USA

Re: Insertar imagen con VB 6

Mensaje por FJCC-ES »

Encontré este código en el foro inglés para incrustar la imagen en el archivo.

Código: Seleccionar todo

Dim Point As New com.sun.star.awt.Point
Dim Size As New com.sun.star.awt.Size

Url_Bitmap=converttourl("C:\Users\mypicture.jpg")

odoc = thiscomponent
oshape = odoc.createInstance("com.sun.star.drawing.GraphicObjectShape")

size.width = 5000
size.Height =7000
point.Y = 2000
point.X = 5000

with oshape
.name = "Shape1"
.size = size
.position = point()
.GraphicURL = Url_Bitmap
end with

opage = odoc.sheets(0).drawpage
opage.add(oshape)

'embed the picture

oBitmap = odoc.createInstance( "com.sun.star.drawing.BitmapTable" )
sName = oshape.LinkDisplayName

If oBitMap.hasByName(sName) Then
oBitmap.replaceByName( sName, oshape.GraphicURL )
else
oBitmap.insertByName( sName, oshape.GraphicURL )
End If

oNewURL = oBitmap.getByName( sName )
oshape.GraphicURL = oNewURL 'Embedded
rikatus
Mensajes: 5
Registrado: Vie Ago 31, 2012 4:14 pm

Re: Insertar imagen con VB 6

Mensaje por rikatus »

Muchas Gracias.

me ayudo mucho el codigo y al final he conseguido que se guarde la imagen en el archivo y no la ruta :)
OpenOffice 3.3 en Windows 7
Avatar de Usuario
SLV-es
Mensajes: 4894
Registrado: Jue Ago 26, 2010 1:25 am
Ubicación: España
Contactar:

Re: Insertar imagen con VB 6

Mensaje por SLV-es »

Hola, rikatus

¿Podrías compartir el código utilizado, por si otros usuarios se encuentran con el mismo o similar problema?


Saludos
+info en la web "no oficial" dedicada a OpenOffice en Español
AOO 4.1.2 y LibO 4.4.6 en W10 y en Lliurex
No respondo mensajes privados sobre AOO, por favor, utiliza el foro para tus preguntas
miguelroof
Mensajes: 1
Registrado: Vie Feb 20, 2015 1:23 pm

Re: Insertar imagen con VB 6

Mensaje por miguelroof »

Hola, estuve trabajando en una macro para pegar multiples imagenes (con W7 64bits no me ofrecía esa posibilidad) en un documento de word, y se pegaran anclada al caracter y ocupando todo el espacio que pudiera. Os dejo el código, por si os sirve (es un remix de varias fuentes, sobre todo del documento de Andrew para macros):

Código: Seleccionar todo

Sub MultiPictures
   Dim oFileDialog as Object
   Dim iAccept as Integer
   Dim sPath as String
   Dim sFiles
   Dim InitPath as String
   Dim oUcb as object
   Dim filterNames(3) as String
   
   Dim document as object
  
   Dim oText 
   Dim oCurs
   Dim FileURL
   Dim objTextGraphicObject as object
   
   Dim i, j,k as Integer

   filterNames(0) = "*.*"
   filterNames(1) = "*.png"
   filterNames(2) = "*.jpg"

   GlobalScope.BasicLibraries.LoadLibrary("Tools")
   oFileDialog = CreateUnoService("com.sun.star.ui.dialogs.OfficeFilePicker")
   oUcb = createUnoService("com.sun.star.ucb.SimpleFileAccess")

   oFileDialog.setMultiSelectionMode(True)
   
   AddFiltersToDialog(FilterNames(), oFileDialog)
   InitPath = ConvertToUrl("C:\Pictures")

   If oUcb.Exists(InitPath) Then
      oFileDialog.SetDisplayDirectory(InitPath)
   End If

   iAccept = oFileDialog.Execute()
   If iAccept = 1 Then
      sFiles = oFileDialog.getFiles()
   else
      exit sub
   End If
   oFileDialog.Dispose()

   document = ThisComponent 
   oText = ThisComponent.Text
   Dim oVC
   oVC = ThisComponent.getCurrentcontroller.getViewCursor
   
   oCurs = oVC.getText.createTextCursorByRange(oVC)
   oCurs.goRight(1,false)
   Dim oBitmaps
   Dim sInternalName$
   oBitmaps = ThisComponent.createInstance("com.sun.star.drawing.BitmapTable") 
   for i = 1 to ubound(sFiles)
        FileURL = sFiles(0) & sFiles(i)
        sInternalName = LoadGraphicIntoDocument(ThisComponent, FileURL, sFiles(i))
        InsertGraphicObject(ThisComponent, oCurs, sInternalName)
   next
End Sub

Function LoadGraphicIntoDocument( oDoc As Object, cUrl$, cInternalName$ ) As String
  Dim oBitmaps
  Dim cNewUrl As String
  Dim i as Integer
  ' Get the BitmapTable from this drawing document.
  ' It is a service that maintains a list of bitmaps that are internal
  '  to the document.
  oBitmaps = oDoc.createInstance( "com.sun.star.drawing.BitmapTable" )
  ' Add an external graphic to the BitmapTable of this document.
  on error resume next
  oBitmaps.insertByName(cInternalName, cUrl)
  cNewUrl = oBitmaps.getByName(cInternalName)
  LoadGraphicIntoDocument = cNewUrl
  
 
End Function

Sub InsertGraphicObject(oDoc, oCursor, sURL$)
  REM Author: Andrew Pitonyak
  Dim oGraph
  Dim oText

  Dim oProps(0) as new com.sun.star.beans.PropertyValue
  oProps(0).Name  = "URL"
  oProps(0).Value = sURL

  oText = oDoc.getText()
  oGraph = oDoc.createInstance("com.sun.star.text.GraphicObject")
  Dim oSize100thMM
  Dim lHeight As Long
  Dim lWidth As Long
  Dim oProvider  'GraphicProvider service.
  
  oProvider = createUnoService("com.sun.star.graphic.GraphicProvider")
  oSize100thMM = RecommendGraphSize(oProvider.queryGraphicDescriptor(oProps))
  If NOT IsNull(oSize100thMM) AND NOT IsEmpty(oSize100thMM) Then
    lHeight = oSize100thMM.Height
    lWidth = oSize100thMM.Width
  End If

  'oShape.Graphic = oProvider.queryGraphic(oProps())
  'oGraph.graphicurl = oShape.graphicurl
  oGraph.graphicURL = sURL
  oGraph.AnchorType = com.sun.star.text.TextContentAnchorType.AS_CHARACTER

  If lHeight > 0 AND lWidth > 0 Then
    Dim oSize
    oSize = oGraph.Size
    oSize.Height = lHeight
    oSize.Width = lWidth
    oGraph.Size = oSize
  End If

  'now insert the image into the text document
  oText.insertTextContent( oCursor, oGraph, False )
End Sub



Function RecommendGraphSize(oGraph)
  Dim oSize
  Dim lMaxW As Double  ' Maximum width in 100th mm
  Dim lMaxH As Double  ' Maximum height in 100th mm

  Dim oVC
  oVC = ThisComponent.getCurrentcontroller.getViewCursor
  Dim pageDesc
  pageDesc = oVC.PageStyleName
  'pageDesc = oVC.ParaStyleName
  Dim oStyle
  oStyle = ThisComponent.StyleFamilies.getByName("PageStyles").getByName(pageDesc)
  lMaxW = oStyle.Width - oStyle.RightMargin -oStyle.LeftMargin - 2*oStyle.BorderDistance
  lMaxH = oStyle.Height - oStyle.TopMargin - oStyle.BottomMargin - 2*oStyle.BorderDistance
  if oStyle.HeaderIsOn then
    lMaxH = lMaxH - oStyle.HeaderBodyDistance - oStyle.HeaderHeight
  end if
  if oStyle.FooterIsOn then
    lMaxH = lMaxH - oStyle.FooterBodyDistance - oStyle.FooterHeight
  end if
  

  'lMaxW = 6.75 * 2540 ' 6.75 inches
 ' lMaxH = 9.5 * 2540  ' 9.5 inches
  
  If IsNull(oGraph) OR IsEmpty(oGraph) Then
    Exit Function
  End If
  oSize = oGraph.Size100thMM
  If oSize.Height = 0 OR oSize.Width = 0 Then
    ' 2540 is 25.40 mm in an inch, but I need 100th mm.
        ' There are 1440 twips in an inch
    oSize.Height = oGraph.SizePixel.Height * 2540.0 * TwipsPerPixelY() / 1440
    oSize.Width = oGraph.SizePixel.Width * 2540.0 * TwipsPerPixelX() / 1440
  End If
  If oSize.Height = 0 OR oSize.Width = 0 Then
    oSize.Height = 2540
    oSize.Width = 2540
    Exit Function
  End If
  If oSize.Width > lMaxW Then
    oSize.Height = oSize.Height * lMaxW / oSize.Width
    oSize.Width = lMaxW
  End If
  If oSize.Height > lMaxH Then
    oSize.Width = oSize.Width * lMaxH / oSize.Height
    oSize.Height = lMaxH
  End If
  RecommendGraphSize = oSize
End Function




OpenOffice 4.1.1 en Windows 7
Avatar de Usuario
SLV-es
Mensajes: 4894
Registrado: Jue Ago 26, 2010 1:25 am
Ubicación: España
Contactar:

Re: Insertar imagen con VB 6

Mensaje por SLV-es »

miguelroof :super: :bravo:
+info en la web "no oficial" dedicada a OpenOffice en Español
AOO 4.1.2 y LibO 4.4.6 en W10 y en Lliurex
No respondo mensajes privados sobre AOO, por favor, utiliza el foro para tus preguntas
Responder