Para importar imágenes en LibreOffice dentro de las celdas es incomodo, hay que importarlas una a una y luego ajustar el tamaño de las celdas.
En su día hice una macro en el excel de Microsoft, pero en LibreOffice no me reconocía unas funciones, por le que he hecho una nueva macro desde cero. El cual se importan las imágenes, simplemente se deben rellenar los cuadros azules de la derecha del botón. El primer ajuste es el número de imágenes que queremos en una columna y en un fila, dibujará una tabla de estas dimensiones. El segundo ajuste es la resolución que queremos que tengan las imágenes.
Cada vez que se pulsa el botón la macro se encarga de eliminar las imágenes existentes y dibujar la tabla con los ajustes ya mencionados. Todas la imágenes deben estar guardados dentro de una carpeta llamada "img" y el formato con el cual deben estar guardas es "img_xx.png", siendo xx un número entre 01 y 99.
Código macro;
Rem Attribute VBA_ModuleType=VBAModule
Option VBASupport 1
Sub Imagenes1()
Dim oDoc As Object
Dim oDrawPage As Object
Dim oShape As Object
Dim iShape As Integer
Dim iSheet As Integer
oDoc = ThisComponent
'Eliminar imagenes
'https://ask.libreoffice.org/t/inserir-foto-c-macro-libreoffice/36492/4
oDrawPage = oDoc.getSheets().getByName("Plantilla").getDrawPage()
For iShape = oDrawPage.getCount() - 1 To 0 Step -1
if oDrawPage.getCount()> 1 then 'Con esto evito elimnar el botón que llama a esta macro
oShape = oDrawPage.getByIndex(iShape)
oDrawPage.remove(oShape)
end if
next
Dim oPaginaDibujo As Object
Dim oImagen As Object
Dim sRuta As String
Dim oCelda As Object
Dim oTam As New com.sun.star.awt.Size
Dim oX As Object
Dim OY As object
dim Ancho as string
dim Largo as string
dim numCeldas_x as integer
dim numCeldas_y as integer
oDoc = ThisComponent
oPlan = oDoc.CurrentController.ActiveSheet
Dim oSel As Object
oPaginaDibujo = oPlan.getDrawPage()
oCelda = oPlan.getCellByPosition( 5,0 ) 'leer parámeto ancho
Ancho = ocelda.string
oCelda = oPlan.getCellByPosition( 5,1 ) 'leer parámeto largo
Largo = ocelda.string
oCelda = oPlan.getCellByPosition( 3,0 ) 'leer número de celdas en x
numCeldas_x=ocelda.string
oCelda = oPlan.getCellByPosition( 3,1 ) 'leer número de celdas en y
numCeldas_y=ocelda.string
dim contador as integer 'contador el máximo sera = ixj
'Cada vez ajusto las celdas a la posicón por defecto
For i = 0 To 103 'Tamaño por defecto
oY = oPlan.Rows(i).getRows() 'Anchura celdas
oY.Height = 500
Next
For j = 0 To 100 'Tamaño por defecto
ox = oPlan.Columns(j).getColumns() 'Altura celdas
ox.Width = 1500
Next
Contador= 0
dim str as string
For i = 0 To numCeldas_y - 1
oY = oPlan.Rows(3 + i).getRows() 'Anchura celdas
oY.Height = Largo *10
For j = 0 To numCeldas_x - 1
ox = oPlan.Columns(j).getColumns() 'Altura celdas
ox.Width = Ancho *10
contador = contador + 1
if contador < 10 then
str= "0" & contador
else
str= contador
end if
sRuta = ConvertToURL(ThisWorkbook.Path & "\IMG\IMG_" & str & ".png") '& j & ".png") 'ruta de la iamgen
oCelda = oPlan.getCellByPosition( j, i +3) 'Posicón de la celda donde se fijará la imagen
If Dir(sRuta) <> "" Then 'Si le imagen existe, la cargo. En caso contrario no hago nada
'Para crear y manipular imágenes
oImagen = oDoc.createInstance( "com.sun.star.drawing.GraphicObjectShape" )
'Establecemos la ruta de la imagen
oImagen.GraphicURL = sRuta
'La agregamos a la página de dibujo, por ende, al conjunto de formas
oPaginaDibujo.add( oImagen )
'Establecemos el tamaño de la imagen, siempre establece un tamaño, si no
'se insertará con un tamaño mínimo casi invisible.
'La unidad viene dada en centésimas de milímetro
oTam.Width = ancho*10
oTam.Height = largo*10
oImagen.setSize( oTam )
oImagen.Anchor = oCelda
END IF
Next
next
End Sub
Descargar plantilla aquí:
https://drive.google.com/file/d/17M4JJNMrD-Q8SRfB2WyyioiXInKpeYZ2/view?usp=sharing