Myslím, že pro inventuru skladu je lepší databázové řešení, s tím ale nepomohu.
Ošetření makrem lze, ale je nutné naprosto přesně definovat, způsob jakým se mají data přenášet.
Sub prenos
dim prekopirovane as object
dim args(1) as new com.sun.star.beans.PropertyValue
args(0).Name = "Hidden" ' otevřeme jako skrytý
args(0).Value = True
args(1).Name = "Password" ' heslo
args(1).Value = "Heslo" ' doplňte si vaše
'zaměňte si adresu dokumentu podle vás
adresa = ConvertToURL("/home/daniel/Plocha/rada/prekopirovane.ods")
doc = thisComponent
okno = doc.currentController.Frame.getComponentWindow ' přiřazení okna dokumentu
okno.setVisible(false) ' uzavřeme okno - zrychlení makra
list_den = doc.sheets(0) ' nebo název listu - doc.sheets.getByName("List1")
' otevřeme překopírované.ods jako skrytý
prekopirovane = Stardesktop.loadComponentFromURL(adresa," ",0, args())
list_prekopirovane = prekopirovane.sheets(0)
oblast_den = list_den.getCellRangeByName("C3:E202").getDataArray ' načteme data ze souboru den.ods
' načítá se 200 řádků
datum = list_den.getCellRangeByName("E1").value ' pro daný dane
for i = 2 to 93 step 3 ' nalezneme stejné datum v překopírované.ods '
den_prekopirovane = list_prekopirovane.getCellByPosition(i,1).value ' zjištění datumu prohledáváme každý třetí sloupec
if den_prekopirovane = datum then ' pokud jsou data shodná tak
'zadefinujeme si oblast pro vložení do překopírované.ods
vloz_do_prekopirovane = list_prekopirovane.getCellRangeByPosition(i,2,i+2,201)
'vložíme celou oblast z dokumentu den.ods
vloz_do_prekopirovane.setDataArray(oblast_den)
else
endif
next i
prekopirovane.store() ' uložíme
prekopirovane.close(True) ' uzavřeme
print "PŘENOS PROVEDEN"
okno.setVisible(True)' zobrazíme okno
End Sub
Tento kód přenese data z dokumentu den.ods do překopírované.ods. V překopírované.ods si musíte přednastavit data na celý měsíc. Nyní provádí makro test dat v rozmezí 31 dní.
Také přenese data inventury v pořadí v jakém jsou zadány ve dni.ods. Stejná struktura musí být i v překopírovaném.ods!
Co se stane, když datum chybí, má se automaticky doplnit? Má makro skončit a nahlásit chybu?
Co s novým zbožím? Je nutné neustále hlídat nové zboží, aby nechybělo. Má se provádět kontrola na toto nové zboží a pokud chybí, má se doplnit? A kam se má doplnit?
Těch otazníků je celá řada a řešení nemusí být zrovna jednoduchá.
Databázové řešení tyto problémy odstraňuje, můžete se inspirovat v seriálu p. Svobody Práce s databází - Base z OpenOffice.
Na druhou stranu s Base má zkušenost jen velmi málo lidí, zatímco s makry vám můžeme pomoci.
;o)