Ahoj,
potřeboval bych radu s jedním výkonnostním problémem:) Mam dokument, který obsahuje několik desítek tisíc řádků, a nad těmito řádky potřebuju spustit funkci Match. Resp vytvořim funkci ve stylu =MATCH(A1;$A$1:$A$45000;1) a necham ji rozšířit do celého sloupce pomocí dvoukliku na pravý dolní roh buňky. Toto trvá zhruba tři minuty. Ovšem z toho co jsem vysledoval, tak podle mého názoru 99% času spotřebuje přizpůsobování výšky řádku. Je nějaká možnost jak tuto funkčnost vypnout???
Dělal jsem několik testů nad různými druhy dat. Pokud byly data ve sloupci homogení, tak sem dospěl až k 17 minutám. Ovšem pokud jsem spustil makro, které vyplnilo sloupec naprosto stejným vzorcem trvala tato operace pouze necelé tři minuty. S ohledem na skutečnost, že se během toho dokument překresloval, skutečná rychost funkce MATCH bude pouze zlomkem této hodnoty. Problém je v libovolné verzi OOo jak pro windows tak linux. Včetně verze go-oo.
Předem dík za jakoukoli odpověď,
Tom
REM ***** BASIC *****
option explicit
Sub Main
Dim oDoc
oDoc = ThisComponent
Dim i
Dim oSheets
oSheets = oDoc.getSheets()
Dim textArray(20)
textArray(0) = "asdasdf"
textArray(1) = "asdfarghrthsd"
textArray(2) = "ewqoruwerio"
textArray(3) = "wedmgoag"
textArray(4) = "famsoivfao"
textArray(5) = "f4eojfosn"
textArray(6) = "fascmvopi"
textArray(7) = "nflkasjdfl"
textArray(8) = "advdhmmlk"
textArray(9) = "sdfmoieowqp"
textArray(10) = "rmmmopqiwer"
textArray(11) = "wqpplank"
textArray(12) = "fasfmippqpqw"
textArray(13) = "qjpm[m"
textArray(14) = "kmpiash"
textArray(15) = "fasmfpoeqpewrwqr"
textArray(16) = "poqweuro"
textArray(17) = "yhoisp"
textArray(18) = "mvpadpf"
textArray(19) = "lapsejf"
Dim oSheet
oSheet = oSheets.getByName( "List1" )
For i = 0 to 44999
oSheet.getCellByPosition( 0, i ).setString( textArray( i Mod 20 ) )
' oSheet.getCellByPosition( 0, i ).setString( "příliš žluťoučký kůň úpěl ďábelské ódy" )
Next
MsgBox "First step complete"
End Sub
makro, které používám pro generování vzorových dat
REM ***** BASIC *****
option explicit
Sub Main
Dim oDoc
oDoc = ThisComponent
Dim i
Dim oSheets
oSheets = oDoc.getSheets()
Dim oSheet
oSheet = oSheets.getByName( "List1" )
For i = 0 to 0
oSheet.getCellByPosition( 1, i ).setFormula( "=match(A" & (i + 1) & ";$A$1:$A$45000;1)" )
Next
MsgBox "Second step complete"
End Sub
a kód makra, které využívám pro rozšíření vzorce do celého sloupce.