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

#1 8. 1. 2009 14:13:18

tom.samek
Člen
Registrace: 11. 10. 2008
Příspěvků: 2

OpenOffice Calc a přizpůsobování řádku

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.

Offline

Zápatí