Faceți ca LibreOffice să recunoască runtime-ul Java
Instalați un runtime Java compatibil, activați-l în LibreOffice și depanați o listă JRE goală fără a modifica setările care nu au legătură cu aceasta.
Cea mai fiabilă primă accelerare pentru o macrocomandă Calc lentă este înlocuirea citirilor și scrierilor repetate celulă cu celulă cu o citire de interval, o buclă în memorie și o scriere de interval. Aceasta reduce apelurile între Basic și Calc; nu garantează un câștig de viteză fix, deoarece formulele, formatarea, dimensiunea fișierului și logica macrocomenzii pot, de asemenea, domina timpul de execuție. Exemplul de mai jos modifică o coloană de stare și arată cum se măsoară atât viteza, cât și corectitudinea. Detaliile API au fost verificate în documentația LibreOffice 26.8 pe 9 octombrie 2026.
Executați macrocomanda curentă pe o copie a registrului de lucru și înregistrați timpul scurs. Utilizați o copie nouă cu aceleași date de pornire pentru macrocomenzile vechi și revizuite sau restaurați datele de intrare între execuții; altfel, a doua execuție poate necesita mai puțin efort. Păstrați numărul de rânduri, setările de calcul și condițiile de ieșire aceleași. Repetați fiecare execuție și comparați timpul tipic, în loc să vă bazați pe o execuție neobișnuit de rapidă. Verificați dacă rezultatul corespunde regulii așteptate. O macrocomandă care se termină mai devreme, dar modifică rândurile greșite, nu reprezintă o îmbunătățire.
Funcția LibreOffice Basic Timerraportează secundele de la miezul nopții; atribuiți-o Longvariabilelor pentru a obține secunde numerice. Pentru o execuție scurtă, înregistrați o valoare de început și una de sfârșit și scădeți-le. Dacă valoarea de sfârșit este mai mică, execuția a depășit miezul nopții, deci adăugați 86.400 de secunde la diferență. Cronometrul raportează secunde întregi; utilizați ScriptForgeserviciul Cronometru pentru o precizie de milisecunde. Consultați documentația LibreOffice Basic Timer și documentația serviciului ScriptForge Timer . Păstrați deschiderea, salvarea și inspecția manuală a registrului de lucru în afara intervalului măsurat, cu excepția cazului în care acestea fac parte din sarcina reală.

O buclă care apelează getCellByPosition()sau citește și scrie proprietăți individuale ale celulelor solicită în mod repetat Calc să traverseze interfața Basic-to-Calc pentru fiecare operație. Cu multe rânduri și coloane, aceste apeluri se pot aduna chiar și atunci când transformarea în sine este simplă. O buclă peste o matrice în memorie vizitează în continuare fiecare rând, dar evită un apel API separat pentru celule pentru fiecare valoare.
Mai întâi eliminați operațiunile care nu afectează rezultatul: evitați selectarea sau activarea celulelor în interiorul buclei, nu recalculați și nu formatați o celulă în mod repetat atunci când o singură operațiune finală pe interval este suficientă și nu procesați coloane întregi dacă este necesar doar un bloc de date delimitat. Aceste modificări ajută la izolarea blocajului real înainte de a adăuga mai multe controale.
Folosește un interval dreptunghiular care conține doar valorile pe care macrocomanda intenționează să le modifice. Exemplul presupune o foaie denumită Data, un rând de antet în rândul 1 și valori de stare în coloana C. Modifică numele foii și intervalul pentru a se potrivi cu registrul de lucru. API-ul getDataArray()returnează intervalul sub formă de rânduri care conțin valori; setDataArray()scrie o matrice de aceeași dimensiune înapoi în intervalul respectiv.

Sub UpdateStatuses
Dim oSheet As Object
Dim oRange As Object
Dim aData As Variant
Dim i As Long
oSheet = ThisComponent.Sheets.getByName("Data")
oRange = oSheet.getCellRangeByName("A2:C10001")
aData = oRange.getDataArray()
For i = LBound(aData) To UBound(aData)
If aData(i)(2) = "pending" Then
aData(i)(2) = "review"
End If
Next i
oRange.setDataArray(aData)
End Sub
Tabloul de rânduri are bază zero: aData(i)(2)se adresează celei de-a treia coloane din fiecare rând. Aici este coloana C deoarece intervalul selectat începe de la A. Secvența exterioară a tabloului reprezintă rânduri, iar fiecare secvență interioară reprezintă coloane. Intervalul transmis setDataArray()trebuie să aibă aceleași dimensiuni ca și tabloul; o nepotrivire generează o eroare. Consultați referința API-ului LibreOffice XCellRangeData și documentația tabloului LibreOffice ScriptForge .

getDataArray()returnează valorile celulelor ca numere sau șiruri de caractere, nu textul formulei originale. Dacă citiți un interval care conține formule și scrieți acel tablou înapoi cu setDataArray(), acele formule pot fi înlocuite cu rezultatele lor curente. Limitați metoda matrice-valori la celulele de intrare/ieșire care ar trebui să conțină valori. Când o macrocomandă trebuie să păstreze sau să modifice formulele, utilizați metodele matrice-formulă getFormulaArray()și setFormulaArray(), sau lucrați numai asupra intervalului care nu este o formulă. Referința API XCellRangeFormula documentează această interfață separată.
Testați aceste opțiuni doar după măsurarea versiunii matricei. Dacă recalcularea formulei reprezintă o mare parte din execuție, puteți interoga isAutomaticCalculationEnabled(), dezactiva temporar calculul automat cu enableAutomaticCalculation(False), apoi restaura setarea originală și recalcula celulele murdare atunci când este necesar. Plasați restaurarea într-o cale de curățare, astfel încât o eroare să nu lase registrul de lucru în modul de calcul manual. Nu dezactivați calculul dacă macrocomanda necesită rezultate proaspete ale formulei între pași. Documentele LibreOffice calculate()recalculează celule murdare; calculateAll()forțează o recalculare completă și poate fi costisitor. Consultați referința API-ului XCalculatable .
lockControllers()poate suspenda unele notificări utilizate pentru actualizările afișajului în timp ce o macrocomandă modifică mai multe celule. Asociați fiecare blocare cu unlockControllers(), inclusiv atunci când macrocomanda se închide printr-un instrument de tratare a erorilor. Aceasta reduce munca de actualizare a afișajului; nu dezactivează calculul formulei și nu transformă logica per celulă într-o operațiune în bloc. Folosiți-o pentru un blocaj măsurat la actualizarea ecranului, nu ca înlocuitor pentru matricele de intervale. Consultați referința API-ului XModel .
Executați macrocomanda revizuită pe o copie a registrului de lucru și înregistrați timpul acesteia în aceleași condiții ca și în cazul valorilor de referință. Comparați rândurile afectate, rândurile neafectate, formulele și totalurile cheie. Salvați, închideți și redeschideți copia dacă fluxul de lucru de producție include salvarea; acest lucru poate dezvălui probleme pe care o verificare vizuală rapidă le trece cu vederea. O îmbunătățire stabilă ar trebui să apară în timpul rulărilor repetate, în timp ce verificările de ieșire continuă să fie reușite.

Dacă macrocomanda își petrece în continuare cea mai mare parte a timpului cu formule complexe, formatare, I/O fișiere sau sortare, profilați acea etapă separat; matricele de intervale reduc doar accesul repetat la celule. Pentru foi de calcul foarte mari, o matrice completă în memorie poate utiliza, de asemenea, o memorie substanțială. Procesați câteva coloane simultan sau împărțiți rândurile în blocuri măsurate dacă presiunea memoriei crește, verificând în același timp dacă fiecare bloc începe și se termină pe rândurile dorite. Dacă datele se află deja într-o bază de date și sarcina este filtrarea, gruparea sau actualizarea înregistrărilor, mutarea acestei lucrări într-o interogare a bazei de date poate fi o opțiune mai bună decât încărcarea fiecărei înregistrări în Calc.
Instalați un runtime Java compatibil, activați-l în LibreOffice și depanați o listă JRE goală fără a modifica setările care nu au legătură cu aceasta.
Construiți un mic container LibreOffice, convertiți documente Office fără o interfață grafică și verificați ieșirea PDF, limitând în același timp accesul la fișierele gazdă.
Reduceți fișierele de prezentare LibreOffice supradimensionate prin comprimarea fotografiilor încorporate, alegerea unor setări de imagine inteligente și verificarea calității diapozitivelor înainte de partajare.
Potriviți dimensiunile paginii din LibreOffice cu cele ale imprimantei dvs., verificați marginile imprimabile și corectați scalarea înainte de a imprima un document cu dimensiune personalizată.
Înlocuiți accesul repetat la celule cu citiri și scrieri în bloc ale intervalelor, apoi comparați rezultatul și protejați formulele în registrele de lucru Calc mari.
Împărțiți un manuscris lung în capitole, asamblați-le în Writer și mențineți consecvența stilurilor, conținutului și verificărilor de export.
Folosește opțiunea PostgreSQL directă din Base pentru a introduce detaliile serverului, a te conecta, a salva un fișier de conexiune ODB și a depana erorile comune de acces.
Instalați un font în folderul de fonturi al utilizatorului Linux, reporniți LibreOffice Flatpak și confirmați că apare în Writer fără a slăbi sandbox-ul aplicației.
Protejați-vă munca și izolați erorile de salvare pe unitatea de rețea în LibreOffice pe macOS Sonoma cu un flux de lucru local, verificări ale permisiunilor și teste specifice.
Păstrați zerourile inițiale în Calc setând coloanele ID la Text în timpul importului CSV, verificând previzualizarea și verificând datele salvate.