Tak zkuste následující makro, udělal jsem to tedy pořádně, žádné hrubé splácnutí. Velikost buněk to zatím nijak nepřizpůsobuje.
Jestli ty buňky budou v jednom sloupci tak jim výšku řádků mohu zkusit přizpůsobovat snadno; ale kdyby měly být různě v dokumentu a měl bych kontrolovat jestli se přizpůsobením rozměru sloupce nebo řádku jedné buňky nezmění neblaze potřebný rozměr pro jinou buňku, tak by to byla nejspíš dost fuška a do toho se mi tedy nechce.
Potenciální nevýhoda je však při exportu, kdy všechno exportuje do JPG, takže možná může někdy nastat problém třeba s průhledností některých PNG. Nicméně možná by šlo udělat export do originálního formátu obrázku, to nyní nevím. Kdyby tohle mělo blbnout, tak bych pro další testy potřeboval pár testovacích obrázků na kterých to blbne.
S tím případným různým DPI zatím nevím jak naložit. XnView umí dávkově nastavit jednotné DPI pro obrázky, takže se to dá zpracovat v jedné dávce s transformací rozměrů - a pod Linuxem mi před pár lety normálně běhalo přes emulátor Wine. Ale s tou dávkovou konverzí rozměrů či DPI si jistě poradíte i bez XnView.
Ve Writeru vím, že to vkládané obrázky zvětšuje, takže vkládanému obrázku zvětším DPI o polovinu a vloží ho do dokumentu v běžné velikosti.
Např. když dám printscreen nějaké části obrazovky a pak rovnou Ctrl+V do Writeru, vloží se to o něco větší -> takže nejdřív otevřu obyčejné Malování, do něj Ctrl+V, uložím obrázek a v XnView mu dám o polovinu větší DPI (např. pokud má DPI 110 tak 110 + 110/2 = 165). S tímto o půlku zvětšeným DPI se pak vkládá v původní osnímkované velikosti.
Když však budou mít obrázky jednotné DPI, tak na jejich korekci velikosti lze využít koeficient iKoef, dal jsem ho na 2/3 což simuluje zvětšení DPI o polovinu - 2/3 je opačné hodnota z 3/2 čili z něčeho zvětšeného o půlku :-). Můžete zkusit dát ho třeba na 2 aby se obrázky zvětšily, pak uvidíte, že to přizpůsobení rozměrů buněk nemusí být od věci :-) - ale jak jsem zmínil na začátku, mnohem jednodušší by to bylo jen pro jeden sloupec než univerzálně pro celý dokument.
Pro pevnou výšku můžete zalaborovat s oSize.height, ale samozřejmě je k tomu potřeba správně napoměrovat i oSize.width.
Sub EXPORT_IMPORT_OBRAZKU 'exportuje ze Sešitu obrázky do adresáře Sešitu a po odsouhlasení hlášky importuje ony obrázky - před potvrzením hlášky se dají tedy upravit
'on local error resume next 'při chybě pokračovat při chybě dál
on local error goto chyba 'při chybě jít na návěští chyba
const iKoef as long = 2/3 'koeficient kterým se násobí výška a šířka obrázku
dim oDoc, oGP, p(1000000), i&, s$, pUrl(), oList, oImg, n&, oDrawPage, oBunka, sUrl$, oCur, oSize as object, oPos
dim props(1) as new com.sun.star.beans.PropertyValue
props(0).Name="URL" : props(1).Name="MimeType"
const sLom$="/"
oDoc=thisComponent 'aktuální Sešit
rem EXPORT
pUrl=split(oDoc.URL, sLom) 'pole pro url se jménem dokumentu
oGP=createUnoService("com.sun.star.graphic.GraphicProvider") 'objekt grafické služby
i=0 'kolik obrázků exportuje z dokumentu
for each oList in oDoc.Sheets
oDrawPage=oList.DrawPage
for n=oDrawpage.Count-1 to 0 step -1
oImg=oDrawpage.getByIndex(n) 'vybraný grafický objekt
if oImg.supportsService("com.sun.star.drawing.GraphicObjectShape") then 'jde o obrázek
pUrl(ubound(pUrl))=oImg.Name & ".jpg" 'poslední položka v poli je jméno Sešitu, takto nahradí příponou .jpg
props(0).Value=convertToURL(join(pUrl, sLom)) : props(1).Value=oImg.Graphic.MimeType
oGP.storeGraphic(oImg.Graphic, props) 'uložit obrázek
s=join(pUrl,sLom) 'url obrázku
p(i)=array(oImg.Anchor,s,oDrawPage) 'pole s buňkou a url příslušného obrázku pro ní
oDrawpage.remove(oImg) 'odstranit obrázek
i=i+1 'počet exportovaných obrázků
end if
next n
next oList
if i=0 then
msgbox("Nebyl exportován žádný obrázek",48)
exit sub
end if
redim preserve p(i-1) 'velikost pole jen na počet exportovaných obrázků
if msgbox("Exportováno, nahrát?",20)<>6 then exit sub 'hláška že chci importovat
rem IMPORT
for i=ubound(p()) to lbound(p()) step -1
oBunka=p(i)(0) 'buňka do které se vloží obrázek
sUrl=p(i)(1) 'url obrázku
oDrawPage=p(i)(2) 'drawPage původního obrázku
oImg=oDoc.createInstance("com.sun.star.drawing.GraphicObjectShape") 'vytvořit grafický objekt obrázku
oImg.GraphicURL=sUrl 'url obrázku do grafického objektu
oDrawPage.add(oImg) 'přidat do stránky
oSize=oImg.Graphic.Size100thMM 'originální rozměry obrázku
oSize.width=CLng(oSize.width*iKoef) 'vynásobit šířku obrázku koeficientem
oSize.height=CLng(oSize.height*iKoef) 'vynásobit výšku obrázku koeficientem
oImg.Size=oSize 'nastavit orig. rozměry
oImg.Anchor=oBunka 'ukotvit k požadované buňce
rem zde kdyžtak bude změna výšky buňky dle obrázku
next i
exit sub
chyba:
msgbox ("Chyba!" & chr(13) & "kód: " & Err & chr(13) & Error & chr(13) & "řádek: " & Erl,16)
End Sub