Fórum pro uživatele kancelářského balíku OpenOffice | LibreOffice
 

#1 6. 4. 2017 15:44:29

kamilos0123
Člen
Registrace: 14. 1. 2016
Příspěvků: 23

Obrázek z URL - VYŘEŠENO

Zdravím,

chtěl bych se zeptat, zda-li by jste byl někdo schopen a ochoten nám vytvořit makro, který by zařídil z URL do vedlejší buňky obrázek?

reprodukce by vypadala následovně:
- sloupec B bude URL k obrázku
- po spuštění makra se vytvoří obrázek z URL do sloupce A, ten se fixne do buňky a výška obrázku nebude přesahovat výšku buňky.

jde o jednorázovou akci na celém listu o mnoha řádcích

Samozřejmě se můžeme domluvit na finanční odměně.

Děkuji.

Editoval kamilos0123 (10. 4. 2017 07:43:17)


LibreOffice

Offline

#2 6. 4. 2017 16:58:32

ludviktrnka
Člen
Registrace: 9. 7. 2009
Příspěvků: 489

Re: Obrázek z URL - VYŘEŠENO

Není to náhodou řešeno tady? https://forum.openoffice.cz/viewtopic.php?id=4129


LibreOffice 5.2.2.2

Offline

#3 6. 4. 2017 16:59:59

neutr
Člen
Registrace: 8. 3. 2007
Příspěvků: 2,311

Re: Obrázek z URL - VYŘEŠENO

To co popisujete je docela jednoduchá záležitost až na tu velikost obrázku. Tam by bylo nejlepší naformátovat předem obrázky na velikost řádku.
     Ve sloupci B budou hypertextové odkazy s názvem obrázku a ten se vloží vedle do stejného řádku ale do sloupce A. To bude dost ošklivé zejména pokud jsou obrázky dost velké a různě široké. Pokud mají být řádky "normální" - tedy 0,45 cm a pak se mají "nafouknout" tak to také jde a bylo by to relativně hezčí ačkoliv pokud budou mít obrázky různé šířky bude to nesmírně ošklivé vždy.
     V takovém případě bych doporučoval spíš obrázky do posledního sloupce. Máte představu jak vložíte obrázek s velkou šířkou a zmizí vám sloupec B?
     Výhodou stejných rozměrů u obrázků je přehlednost zejména pokud by se měly otevřít jen nová kliknutí (původní obrázek by zmizel a řádek by se "zmenšil" na původní velikost).


     Ale věděl bych o lepším řešení. Klikačky tak jak popisujete ale obrázky by šly do dialogu. Jde ale o to na co ty obrázky potřebujete - jen na informativní náhled nebo také pro kopírování (například do nabídek - příloh emailu?).


     Práce s obrázkem v dialogu není obvyklá ale je to efektní. Při tom sešit není zatěžován obrázky které mohou opravdu komplikovat náhledy a někdy zpomalovat zejména když by to byly "těžké".

   
     V podstatě není ani velký problém generátoru sešitů nebo nabídek jako příloh emailů. Hlavně nechtějte "embedding" obrázky. To by muselo být jen nanejvýš několik desítek "malých obrázků". Akle mohl by mít každý klient jiný obsah nabídek (pokud jde o tento typ a komerčnost).


PS pan Trnka má pravdu to je identické zadání - nevzpoměl jsem si na to :-(

Editoval neutr (6. 4. 2017 17:02:30)


Pokud je Váš problém vyřešen, označte prosím svůj příspěvek za "VYŘEŠENÝ"
Zlepšíte tak orientaci na fóru při vyhledávání řešení problémů
JAK OZNAČIT TÉMA ZA VYŘEŠENÉ

Online

#4 6. 4. 2017 19:36:12

ludviktrnka
Člen
Registrace: 9. 7. 2009
Příspěvků: 489

Re: Obrázek z URL - VYŘEŠENO

Ono to až tak složité není. Obrázek je potřeba umístit do buňky pomocí dispatcheru a následně upravit velikost pomocí DrawPage. Narychlo jsem splodil makro, ale v případě použití je potřeba tam zadat do cyklu FOR od jakého řádku po jaký se to má provést. Tak je to takové méně komfortní.

EDIT: upravil jsem to na otevřený cyklus, omezený počtem po sobě jdoucích prázdných buněk, takže for zmizelo.

sub CreateImage
   'insert the image in the cell and resize
   dim oDoc as object, oDocFrame as object
   dim oDrawPage as object, oDrawPageObj as object
   dim dispatcher as object
   dim velikost as New com.sun.star.awt.Size
   dim pozice as New com.sun.star.awt.Point
   dim args1(3) as new com.sun.star.beans.PropertyValue
   dim args2(0) as new com.sun.star.beans.PropertyValue
   dim i as integer
      
   oDoc = ThisComponent   
   oDocFrame = oDoc.CurrentController.Frame
   dispatcher = createUnoService("com.sun.star.frame.DispatchHelper")
   
   list = oDoc.CurrentController.getActiveSheet()
   
   oDrawPage = list.DrawPage
   prazdne = 0
   i = inputbox("Od jakého řádku mám začít? Zadej číslo řádku.","Zadej první řádek s adresou",2)
   
Do While prazdne < 5
'cyklus poběží dokud nenarazí na čtyři prázdné buňky po sobě
   
   pozice1 = "A"& i
   pozice2 = "B"& i
   
   text_kodu = list.GetCellRangeByName(pozice2).String
   'načtení URL - předpokládá se že je to již ve správné podobě

   if text_kodu <> "" then 'prázdnou buňku přeskočíme
   
      args2(0).Name = "ToPoint"
      args2(0).Value = pozice1
      dispatcher.executeDispatch(oDocFrame, ".uno:GoToCell", "", 0, args2())
      
      args1(0).Name = "FileName"
      args1(0).Value = text_kodu
      args1(1).Name = "FilterName"
      args1(1).Value = "<All formats>"
      args1(2).Name = "AsLink"
      args1(2).Value = false
      args1(3).Name = "Style"
      args1(3).Value = "TMsigFrame"
      dispatcher.executeDispatch(oDocFrame, ".uno:InsertGraphic", "", 0, args1())

     'načte poslední vložený obrázek
      oDrawPageObj = oDrawPage.getByIndex(oDrawPage.Count - 1)
	
     'úprava velikosti
      vyska_radku = list.rows(i-1).Height - 100 'setin milimetru - volitelná hodnota zmenšení obrázku	
      velikost = oDrawPageObj.getSize()
      velikost.width = velikost.width * vyska_radku / velikost.height  'setin milimetru
      velikost.height = vyska_radku 'setin milimetru
      oDrawPageObj.setsize(velikost)
      
     'úprava pozice
      sirka_sloupce = list.columns(0).Width 'setin milimetru
      pozice =  oDrawPageObj.getPosition()
'     pozice.X = pozice.X + 1000 'setin milimetru - volitelná hodnota levého odsazení - zvolit pro umístění vlevo
      pozice.X = pozice.X + (sirka_sloupce - velikost.width) - 1000 'setin milimetru - volitelná hodnota pravého odsazení - zvolit pro umístění vpravo     
'     pozice.X = pozice.X + (sirka_sloupce - velikost.width) / 2 'zvolit pro případ umístění na střed
      pozice.Y = pozice.Y + 50  'setin milimetru - volitelná hodnota horního odsazení
      oDrawPageObj.setposition(pozice)

      prazdne = 0
   else
      prazdne = prazdne + 1   
      
   end if 
   
   i = i + 1  
   
Loop

end sub

Ještě by se v tomto případě mohlo hodit i makro na mazání všech obrázků. Když by se totiž URL změnila, tak makro vygeneruje obrázky znova, na oko to bude vypadat robře, ale ve skutečnosti se tam obrázky na sebe štosují. Takže je lepší nejdříve vše vymazat a potom obrázky znovu generovat.

Sub Clean
REM PROGRAM SMAŽE VŠECHNY OBRÁZKY KROMĚ VYJMENOVANÝCH A OVLÁDACÍCH PRVKŮ
   oSheet = ThisComponent.CurrentController.getActiveSheet()
   oDP = oSheet.DrawPage
   for i = oDP.Count - 1 to 0 step -1
      oObj = oDP.getByIndex(i)
      TextString = oObj.getname
     
      If TextString <> "logo1" Then 'zde zadejte název obrázku který chcete zachovávat
         If TextString <> "logo2" Then 'zde zadejte název obrázku který chcete zachovávat, podmínky lze dále štosovat
           If Not oObj.supportsService("com.sun.star.drawing.ControlShape") Then   'tato podmínka zachová ovládací prvky
              oDP.remove(oObj) 'smaž obrázek
           End If
         End If  
      End If
   next i
End sub

Editoval ludviktrnka (8. 4. 2017 09:42:49)


LibreOffice 5.2.2.2

Offline

#5 10. 4. 2017 07:37:13

kamilos0123
Člen
Registrace: 14. 1. 2016
Příspěvků: 23

Re: Obrázek z URL - VYŘEŠENO

Všem děkuji, p. Trnkovi obzvlášť wink


LibreOffice

Offline

Zápatí