[Risolto] - Visualizzare immagini esterne

Discussioni sull'applicazione per i fogli di calcolo
Rispondi
ilkappa
Messaggi: 39
Iscritto il: mercoledì 1 febbraio 2017, 12:52

[Risolto] - Visualizzare immagini esterne

Messaggio da ilkappa »

Ciao a tutti

Una domanda veloce voloce, d'altrone mi sono iscritto per questo:
è possibile visualizzare in un foglio calc delle immagini relative ad un... indirizzo locale, inserito o generato in una cella?

Ho un foglio chiamato Listino contenente circa 5000 record ogni uno relativo ad un prodotti differente.
Da un secondo foglio di volta in volta richiamo dai 3 ai 18 articoli di questo listino e vorrei, oltre ai dati che recupero, visualizzare la foto di questo prodotto. Foto presente in una cartella insieme a tutte le altre.

Grazie

Dimenticavo. Se farlo con Calc non è possibile, mi suggerite un sistema (in parallelo lo sto facendo con Python e Kivy per farlo andare su Android)
Ultima modifica di ilkappa il lunedì 6 febbraio 2017, 13:43, modificato 1 volta in totale.
OpenOffice 3.1 su Ubuntu 16.04
patel
Volontario attivo
Volontario attivo
Messaggi: 4020
Iscritto il: venerdì 30 aprile 2010, 8:04
Località: Livorno

Re: Visualizzare immagini esterne

Messaggio da patel »

è possibile, ma allega un file di esempio con poche righe e poche foto
-------------------
Libre Office 7.5.3.2 su Windows 11
allega un file di esempio, guadagnerai tempo tu e lo farai risparmiare a chi ti aiuta
Gaetanopr
Volontario
Volontario
Messaggi: 3300
Iscritto il: mercoledì 21 novembre 2012, 20:07

Re: Visualizzare immagini esterne

Messaggio da Gaetanopr »

Sul forum è stato tratto diverse volte questo argomento, hai dato un'occhiata?
Questo ad esempio risale a qualche giorno fà
viewtopic.php?f=9&t=8030
LibreOffice 7.2.2.2 windows 10
Openoffice 4.1.13 su windows 10
ilkappa
Messaggi: 39
Iscritto il: mercoledì 1 febbraio 2017, 12:52

Re: Visualizzare immagini esterne

Messaggio da ilkappa »

Ciao Gaetano.
In realtà è da un mesetto che cerco, non solo sul forum ma in generale online. O ho cercato male o quello che ho trovato non fa al caso mio.
Adesso controllo il tuo link al limite allego un file come chiesto da Patel
OpenOffice 3.1 su Ubuntu 16.04
ilkappa
Messaggi: 39
Iscritto il: mercoledì 1 febbraio 2017, 12:52

Re: Visualizzare immagini esterne

Messaggio da ilkappa »

Ok Grazie Gaetano per il collegamento.

Ipotizzo di dover utilizzare la macro che hai inserito.
Purtroppo sono completamente ignorante per quel che riguarda le macro.

Ho provato a modificarla secondo questo ragionamento:
Sono su un sistema Unix ed ho salvato il file all'interno della cartella Scaricati presente in Home
Quindi dove richiede il convert to url devo inserire l'indirizzo corretto della cartella Scaricati.

Codice: Seleziona tutto

ConvertToURL("/home/cas/Scaricati/" & NomeImage & ".jpg")
creando un immagine chiamata prova.jpg nella cartella Scaricati.

Ora, stando al file scaricato nel 3d precedente, se inserisco un nome nella cella A37, dovrebbe apparire una immagine in a15 giusto?
Il codice seguente e quello postato da te in fondo alla pagina di quell'esempio con la sola modifica indicata sopra.
C'è da eseguire un qualche comando per farla eseguire?
Dovrebbe partire da sola dopo il salvataggio?
Devo salvare il file e riaprirlo?

Oppure sto proprio cannando approccio?

Codice: Seleziona tutto

Sub Immagine1(Target)
Dim Sh As Object, addr As Object
Dim Doc As Object
Dim Drw As Object, Image As Object, Gp As Object
Dim positionImage As New com.sun.star.awt.Point
Dim props(0) As New com.sun.star.beans.PropertyValue
Doc = ThisComponent
fpath = left(Doc.geturl(),revinstr(Doc.geturl(),"/"))
Sh = Target.getSpreadsheet()
oCellT() = Split(Target.AbsoluteName, ".")
oCellTarget = oCellT(1)
If oCellTarget = "$A$37" Or oCellTarget = "$C$37" Then
   If oCellTarget = "$A$37" Then 
      ITarget = sh.getCellRangeByName("A15") ' serve per le coordinate di inserimento dell'immagine
      oCell = "$A$15"
   ElseIf oCellTarget = "$C$37" Then 
      ITarget = sh.getCellRangeByName("D37") ' serve per le coordinate di inserimento dell'immagine
      oCell = "$D$37"
   End If

   NomeImage =  Target.String
   For s = 0 To 4
      Gp = createUnoservice("com.sun.star.graphic.GraphicProvider")
      props(0).Name = "URL" '   D:\Users\Gaetano\Desktop\download.png
      props(0).Value = ConvertToURL("//" & NomeImage & ".jpg") '("C:\Documents and Settings\Administrator\Desktop\" & NomeImage & ".jpg")
      Image=Doc.createInstance("com.sun.star.drawing.GraphicObjectShape")
      Image.Graphic = Gp.queryGraphic( props() )
    ' Controllo se è presente l'immagine in archivio
      If IsNull(Image.Graphic) Then MsgBox "Immagine non presente in archivio" ': exit sub
        ' Elimino se presente immagine precedente nella cella di destinazione
        Drw = Doc.sheets(s).DrawPage
        For i = 0 To Drw.Count - 1
            CellaImmagine() = Split(Drw(i).Anchor.AbsoluteName, ".")
            If  CellaImmagine(1) = oCell Then
                Drw.Remove(Drw(i))
                Exit For
            End If   
       Next i

    '   Aggiungo l'immagine   
        Drw.add(Image)
      ' Ridimensiono l'immagine
       Larg =  5000
       resizeImageByWidth(Image,Larg) 

       positionImage.x = ITarget.position.x
       positionImage.y = ITarget.position.y
       Image.Position = positionImage
       Image.Name = NomeImage
       Image.Anchor = Doc.Sheets(s).getCellrangebyname(oCell) 
       Image.LayerId = 1  'imposta l'immagine sullo sfondo

  Next s

End if
End Sub

Sub resizeImageByWidth(ImageCmp As Object, Larg As Long)
Dim imageInfo As Object, Proporzione As Double, SizeImage As Object
imageInfo = ImageCmp.Graphic
SizeImage = imageInfo.SizePixel
Proporzione = SizeImage.Height / SizeImage.Width
SizeImage.Width = Larg
SizeImage.Height = SizeImage.Width * Proporzione
ImageCmp.Size = SizeImage
End Sub

function revinstr(s as string, slash as string) as string
    dim ii as integer
   ii=0
   do
   if instr(ii+1,s,slash)=0 then exit do
      ii=instr(ii+1,s,slash)
   loop
   revinstr = ii
end function
Grazie per la pazienza

P.s. Se fossi cosi gentile da commentarmi alcune righe in modo da capire che fanno posso provare a smanettarci...
OpenOffice 3.1 su Ubuntu 16.04
patel
Volontario attivo
Volontario attivo
Messaggi: 4020
Iscritto il: venerdì 30 aprile 2010, 8:04
Località: Livorno

Re: Visualizzare immagini esterne

Messaggio da patel »

questa macro gestisce un evento, occorre cliccare col destro sul tab del foglio, scegliere l'evento e associare la macro.
Se non sei pratico ti conviene allegare il tuo file, ma spiega bene cosa vuoi ottenere.
Con il sistema unix non è necessario usare ConvertToURL e devi usare la / e non la \
-------------------
Libre Office 7.5.3.2 su Windows 11
allega un file di esempio, guadagnerai tempo tu e lo farai risparmiare a chi ti aiuta
ilkappa
Messaggi: 39
Iscritto il: mercoledì 1 febbraio 2017, 12:52

Re: Visualizzare immagini esterne

Messaggio da ilkappa »

Ciao Patel,

allora, ho inserito in allegato un file contenente 3 foglio:

Articoli, in cui io inserisco l'elenco dei miei articoli, (ne ho inseriti alcuni d'esempio)
Ordini, in cui inserisco gli ordini del cliente, è già descritto ma: L'unico valore dinamico vero è il campo descrizione, che viene recuperato tramite un CERCA.VERT dal foglio Articoli
Stampa, questo è il foglio su cui devo lavorare (in pratica un report). Contiene la visualizzazione di tre Ordini, pronti per essere stampati tutti richiamati da una cella A1 nella quale inserisco il riferimento di una cella del foglio Ordini
Nella cella che ho contrassegnato in viola (piu o meno) vorrei apparisse l'immagine dell'articolo ordinato. Il file della foto dell'articolo sarà inserito in una sotto cartella relativa alla root dov'è salvato il file Esempio.ods(in questo caso) quindi tutta la path può essere dichiarata direttamente nella macro (come nell'esempio di macro precedente) tranne appunto il nome del file che è identico al codice articolo (1, 2004, 30013 ecc..).

Spero di essere stato esaustivo. Ti ringrazio.
(avrei anche bisogno di capire, se sei cosi gentile da modificare/creare la macro, come la stessa funziona)
Allegati
Esempio.ods
Esempio di file per inserimento di una immagine nel foglio Stampa
(34.8 KiB) Scaricato 145 volte
OpenOffice 3.1 su Ubuntu 16.04
patel
Volontario attivo
Volontario attivo
Messaggi: 4020
Iscritto il: venerdì 30 aprile 2010, 8:04
Località: Livorno

Re: Visualizzare immagini esterne

Messaggio da patel »

quali nomi hanno le immagini da inserire ? allegami uno zip con quelle dell'esempio
-------------------
Libre Office 7.5.3.2 su Windows 11
allega un file di esempio, guadagnerai tempo tu e lo farai risparmiare a chi ti aiuta
ilkappa
Messaggi: 39
Iscritto il: mercoledì 1 febbraio 2017, 12:52

Re: Visualizzare immagini esterne

Messaggio da ilkappa »

Perdonami non ho capito cosa intendi. Tutti gli articoli hanno la relativa loro immagine. Piccola perchè è da 250x250px... con nome come dicevo 1.jpg, 2002.jpg, 20542.jpg ecc..
Questo intendevi?
OpenOffice 3.1 su Ubuntu 16.04
patel
Volontario attivo
Volontario attivo
Messaggi: 4020
Iscritto il: venerdì 30 aprile 2010, 8:04
Località: Livorno

Re: Visualizzare immagini esterne

Messaggio da patel »

volevo sapere se le immagini hanno il nome del prodotto o dell'articolo, per colaudare il codice dovresti allegami uno zip con le immagini dell'esempio
comunque prova questa

Codice: Seleziona tutto

Sub Immagine1 
Dim positionImage As New com.sun.star.awt.Point
Dim props(0) As New com.sun.star.beans.PropertyValue
Doc = ThisComponent
fpath = "file:///nomeutente/home/immagini/" ' <<<<<<<<< da modficare
Sh = Doc.sheets.getByName("Stampa")
for riga = 2 to 22 step 10
  articolo = sh.getCellRangeByName("A" & riga + 4).string
  p = instr(articolo,"-")
  articolo = left(articolo, p - 3)
  ITarget = sh.getCellRangeByName("G" & riga)
  rowHeight = Sh.Rows(Itarget.CellAddress.Row).Height
  colWidth = Sh.Columns(Itarget.CellAddress.Row).Width
'  addr = Targ.cellAddress
  Drw = Sh.DrawPage
  Gp = createUnoservice("com.sun.star.graphic.GraphicProvider")
  props(0).Name = "URL"
  props(0).Value = fpath & articolo & ".jpg"
  Image=Doc.createInstance("com.sun.star.drawing.GraphicObjectShape")
  Image.Graphic = Gp.queryGraphic( props() )
' Controllo se è presente l'immagine in archivio
  If IsNull(Image.Graphic) Then MsgBox "Immagine non presente in archivio" : exit sub
'   Aggiungo l'immagine   
  Drw.add(Image)
' Ridimensiono l'immagine
  Larg =  1500
  resizeImageByWidth(Image,colWidth,rowHeight) 

  positionImage.x = ITarget.position.x
  positionImage.y = ITarget.position.y
  Image.Position = positionImage
  Image.Name = NomeImage
next  
End Sub

Sub resizeImageByWidth(ImageCmp As Object, Larg As Long, alt as long)
Dim imageInfo As Object, Proporzione As Double, SizeImage As Object
imageInfo = ImageCmp.Graphic
SizeImage = imageInfo.SizePixel
SizeImage.Width = Larg
SizeImage.Height = alt
ImageCmp.Size = SizeImage
End Sub
-------------------
Libre Office 7.5.3.2 su Windows 11
allega un file di esempio, guadagnerai tempo tu e lo farai risparmiare a chi ti aiuta
ilkappa
Messaggi: 39
Iscritto il: mercoledì 1 febbraio 2017, 12:52

Re: Visualizzare immagini esterne

Messaggio da ilkappa »

Grazie Patel

Ho provato a caricare la macro.. ma non capisco come faccio ad eseguirla (dovrebbe partire automaticamente o devo dare qualche comando particolare)
Ti ho allegato le foto

... nel frattempo ho fatto una prova dando il comando esegui macro e si visualizzano le immagini, richiuse nella cella.
Dovrei capire ora come fare perchè mantengano le proporzioni 1:1 e sopratutto come eseguire la macro.

Chiedo, se non ti è di disturbo, potresti spiegarmi come funziona sommariamente questa macro cosi la studio ed inizio a capirne il funzionamento grazie.
Allegati
esempio.zip
(27.84 KiB) Scaricato 114 volte
OpenOffice 3.1 su Ubuntu 16.04
ilkappa
Messaggi: 39
Iscritto il: mercoledì 1 febbraio 2017, 12:52

Re: Visualizzare immagini esterne

Messaggio da ilkappa »

Sono riuscito grossomodo ad interpretare la Macro.

L'ho modificata in modo tale da acquisire l'articolo di riferimento da un'altra cella e ho modificato le dimensioni delle foto caricate. Ora va bene.
Il problema si presenta nel momento in cui copio la macro nel foglio reale, quello che utilizzo.
I problemi in realtà sono due:
1, non è solo su un foglio Stampa che deve funzionare ma su due: Stampa Gruppi e Stama Singolo
2 anche se più importante del punto 1.... NON FUNZIONA!!
OpenOffice 3.1 su Ubuntu 16.04
patel
Volontario attivo
Volontario attivo
Messaggi: 4020
Iscritto il: venerdì 30 aprile 2010, 8:04
Località: Livorno

Re: Visualizzare immagini esterne

Messaggio da patel »

devi allegare un file significativo se non sei in grado di modificare la macro
-------------------
Libre Office 7.5.3.2 su Windows 11
allega un file di esempio, guadagnerai tempo tu e lo farai risparmiare a chi ti aiuta
ilkappa
Messaggi: 39
Iscritto il: mercoledì 1 febbraio 2017, 12:52

Re: Visualizzare immagini esterne

Messaggio da ilkappa »

Non funzionava perchè avevo impostato a livello di sicurezza a MEDIO e le macro funzionavano solo tramite autorizzazione.
Ora ho dovuto impostare la sicurezza su BASSO e la macro è partita
(Domanda su domanda, come posso garantire la sicurezza della macro?)

Ora funziona e devo solo capire come rendere attiva la macro sul foglio in uso...
OpenOffice 3.1 su Ubuntu 16.04
patel
Volontario attivo
Volontario attivo
Messaggi: 4020
Iscritto il: venerdì 30 aprile 2010, 8:04
Località: Livorno

Re: Visualizzare immagini esterne

Messaggio da patel »

il foglio atttivo lo trovi così

Codice: Seleziona tutto

Doc = thiscomponent  
sh = Doc.currentcontroller.getActiveSheet()
print sh.name
-------------------
Libre Office 7.5.3.2 su Windows 11
allega un file di esempio, guadagnerai tempo tu e lo farai risparmiare a chi ti aiuta
ilkappa
Messaggi: 39
Iscritto il: mercoledì 1 febbraio 2017, 12:52

Re: Visualizzare immagini esterne

Messaggio da ilkappa »

Grazie

Ora è tutto risolto più o meno.
OpenOffice 3.1 su Ubuntu 16.04
ilkappa
Messaggi: 39
Iscritto il: mercoledì 1 febbraio 2017, 12:52

Re: [Risolto] - Visualizzare immagini esterne

Messaggio da ilkappa »

Riapro un attimo questo 3d. per una informazione.
Ore eseguo la macro premendo un pulsante, ma ho visto e fatto diverse prove, potrei tranquillamente attivarla alla modifica del foglio.
La domanda che mi sorge è questa:

le immagini che la macro automaticamente visualizza, come posso eliminarle senza doverlo fare a mano? Mi spiego, volendo attivare la macro alla modifica del foglio, prima di recuperare i dati e visualizzare le immagini, dovrebbe cancellare le eventuali presenti. E' possibile?
OpenOffice 3.1 su Ubuntu 16.04
patel
Volontario attivo
Volontario attivo
Messaggi: 4020
Iscritto il: venerdì 30 aprile 2010, 8:04
Località: Livorno

Re: [Risolto] - Visualizzare immagini esterne

Messaggio da patel »

usa questa sub

Codice: Seleziona tutto

Sub clearGraphs
oDrawPages = ThisComponent.getDrawPages()
If oDrawPages.hasElements() Then
  For i = 0 To oDrawPages.getCount() - 1  REM # For all drawpages in workbook
      oDrawPage = oDrawPages.getByIndex(i)
      If oDrawPage.hasElements() Then
         For j = (oDrawPage.getCount() - 1) To 0 Step -1
             oShape = oDrawPage.getByIndex(j)
             oDrawPage.remove(oShape)
         Next j
      EndIf
  Next i
EndIf
End Sub
-------------------
Libre Office 7.5.3.2 su Windows 11
allega un file di esempio, guadagnerai tempo tu e lo farai risparmiare a chi ti aiuta
ilkappa
Messaggi: 39
Iscritto il: mercoledì 1 febbraio 2017, 12:52

Re: [Risolto] - Visualizzare immagini esterne

Messaggio da ilkappa »

Grazie
funziona alla perfezione
OpenOffice 3.1 su Ubuntu 16.04
Rispondi