Tak si to změřím... (Třeba podle: Useful Macro Information For OpenOffice By Andrew Pitonyak)
Sub ExampleGetSystemTicks
Dim lTick As Long, lMillisToWait As Long
Dim lSecsToWait As Long, lTicksPerSec As Long
lSecsToWait = 60
lMillisToWait = lSecsToWait * 1000
lTick = GetSystemTicks()
wait(lMillisToWait)
lTick = (GetSystemTicks() - lTick)
lTicksPerSec = lTick / lSecsToWait
MsgBox "Each second has about " & lTicksPerSec & " Ticks Per Second"
End Sub
hanus napsal(a)To kopírování z listů do jednoho se asi rychleji udělat nedá.
Nemyslím si to - v makru se neustále přepíná mezi sešity, plní se schránka, ...
Něco jako:
...
Doc = ThisComponent
pocet_listu = Doc.Sheets.GetCount
SumSheet = Doc.Sheets(0)
oRange = SumSheet.getCellRangeByName(oblast_dat_v_listu)
pocet_radku = oRange.getRows.getCount
pocet_sloupcu = oRange.getColumns.getCount
' opravíme z normálního počítání na getCellRangeByPosition
radek_pro_vlozeni = prvni_radek-1
if pocet_listu >= prvni_list_dat then
For poradi_listu = prvni_list_dat To pocet_listu
data = Doc.Sheets.getByIndex(poradi_listu-1).getCellRangeByName(oblast_dat_v_listu).getDataArray
oRange = SumSheet.getCellRangeByPosition(0,radek_pro_vlozeni,pocet_sloupcu-1,radek_pro_vlozeni + pocet_radku-1)
oRange.setDataArray(data)
radek_pro_vlozeni = radek_pro_vlozeni + pocet_radku
Next poradi_listu
' vymazani radku bez udaju ve sloupci
' mažeme od konce - proti původnímu to není o moc rychlejší,
' přesněji je to stále pomalé, ale připadá mi to přehlednější
for radek = radek_pro_vlozeni - 1 to prvni_radek step -1
if SumSheet.getCellbyPosition(kontrolni_sloupec,radek).String = "" then
' toto by šlo nahradit načtením sloupce do paměti pomocí getDataArray,
' a testováním hodnot pole, případně hledáním ve sloupci pomocí vestavěných funkcí
' zrychlení by bylo asi dost zajímavé
SumSheet.Rows.removeByIndex(radek,1)
end if
next radek
end if
je o dost rychlejší
(u mne původní makro na zaslaném sešitu běží cca 5,6 sec, po úpravě 3,2 sec, oba časy včetně původního třídění)
potenciál pro zrychlení určitě není tímto vyčerpán