OpenOffice (Calc) - potrzebny macher od makr.

Moderator: Moheratorzy

Awatar użytkownika
kombo
Posty: 530
Rejestracja: 2007-02-28, 20:11
Gadu-Gadu: 3831955
Lokalizacja: Krzeszowice / Kraków
Kontakt:

OpenOffice (Calc) - potrzebny macher od makr.

Post autor: kombo »

Pokrótce opisze sytuację:
jest sobie makro w Excelu, makro działa na zasadzie "wiersz po wierszu" czyli odczytywana jest wartość kilkunastu komórek z kolejnych wierszy Arkusza1 , dokonywane sa sprawdzenia/obliczenia i jesli warunki są spełnione - zapisywane są wartości do kilkunastu komórek w kolejnych wierszach Arkusza2 (początkowo pustego).
Nic specjalnego.
W Arkuszu1 jest ok 15 tys wierszy, wynikowo w Arkuszu2 powstaje ok 4 tys. wierszy.
Czas wykonania tego makra w Excelu to kilkanaście sekund (łącznie z sortowaniem wykonywanym na końcu).

Przerobiłem to makro pod OO (wersja 2.3.1) i czas wykonywania wynosi nieco ponad 3,5 minuty plus ok. 30s na sortowanie. Razem ponad 4 minuty- masakra ;)

Zrobiłem testy, "zaremowałem" wpisywanie danych do Arkusza2 i okazało się że odczytanie 15 tys komórek z Arkusza1, wykonanie wszystkich sprawdzeń i obliczeń zajmuje ok 30 sekund - wychodzi na to że problem powstaje przy wpisywaniu wartości komórek w kolejnych wierszach do Arkusza2, które trwa ponad 3 minuty.

Pytanie brzmi - czy jest jakaś metoda/sposób/hint/ch_w_c aby dalo się przyspieszyć wprowadzanie danych do komórek? W tej chwili korzystam z funkcji:

Kod: Zaznacz cały

'*** tworzenie obiektu
oKomBo=ThisComponent              
oKomBoSheet=oKomBo.Sheets.getByName("KomBo")   

'*** "namiar" na konkretną komórkę
oKomBoCell=oKomBoSheet.getCellRangeByName("A" + CStr({kolejny wiersz- integer}))

'*** wstawienie wartosci do konkretnej komorki
oKomBoCell.setString({jakiś string}) 
'*** lub 
oKomBoCell.setValue({jakaś liczba}) 

W Delphi jest coś takiego jak BeginUpdate i EndUpdate, sprawdza się przy wprowadzaniu wiekszej ilości danych np. do listy/tabeli, rozkaz BeginUpdate blokuje odświeżanie listy/tabeli po każdym dodaniu wiersza, EndUpdate wymusza odświeżenie listy/tabeli już po dodaniu wszystkich wierszy. Może coś takiego jest w OO i da jakiś efekt?

Dodam jeszcze że w opcjach odznaczyłem np. sprawdzanie pisowni i inne tego typu nieprzydatne dla mojego przypadku automatyczne funkcje.
www.kombo.krakow.pl
MSI P6NGM-FD, E2160@3GHz (9x333MHz), 2x1GB GoodRam@902MHz CL6-5-5-20-27-2T, Samsung HD200HJ 200GB SATA, Huntkey HK-400 XP Silencer

ODPOWIEDZ