Wopśimjeśe

# Gódnoty do wobceŕkow cytaś a pisaś

Makra w LibreOffice Calc cesto muse gódnoty z/do tabelow cytaś a pisaś. Toś ten bok pomocy wšake wašnje póstupowanja wopisujo, pśistup k tabelam a wobceŕkam dostaś, aby wy jich gódnoty cytał abo pisał.

Wšykne pśikłady, kótarež se na toś tom boku pśedstajaju, daju se do Basic ako teke do Python implementěrowaś.

## Pśistup k jadnotliwej celi

Slědujucy pśikład numerisku gódnotu 123 do cele "A1" aktualneje tabele zapódawa.

        Dim oSheet as Object
        Dim oCell as Object
        oSheet = ThisComponent.CurrentController.getActiveSheet()
        oCell = oSheet.getCellRangeByName("A1")
        oCell.setValue(123)

To samske dajo se z Python dojśpiś:

        doc = XSCRIPTCONTEXT.getDocument()
        sheet = doc.getCurrentController().getActiveSheet()
        cell = sheet.getCellRangeByName("A1")
        cell.setValue(123)

Źiwajśo na to, až pjerwjejšne pśikłady z pomocu wobceŕkowego mjenja "A1" pśistup k celi maju. Pśistup k celam jo teke móžny, gaž indekse wužywaśo, ako by tabela matriks była, źož słupy a smužki su wót nul indicěrowane.

Móžośo to z pomocu metody getCellByPosition(colIndex, rowIndex) cyniś, kótaraž słupowy a smužkowy indeks pśiwzejo. Slědujucy pśikład w Basic tekstowu gódnotu w celi "C1" (słup 2, smužka 0) změnja.

        oSheet = ThisComponent.CurrentController.getActiveSheet()
        oCell = oSheet.getCellByPosition(2, 0)
        oCell.setString("Hello")

Toś ten pśikład dajo se teke w Python ako slědujo implementěrowaś:

        doc = XSCRIPTCONTEXT.getDocument()
        sheet = doc.getCurrentController().getActiveSheet()
        cell = sheet.getCellByPosition(2, 0)
        cell.setString("Hello")

Głowny rozdźěl mjazy skriptami Python a Basic w tom wobstoj, kak móžośo pśistup k tabelowemu objektoju z pomocu kontekstoweje wariable XSCRIPTCONTEXT dostaś. Pó tom su wšykne metody a kakosći w Basic a Python identiske.

## Gódnoty, znamuškowe rjeśazki a formule

Cele Calc mógu tśi typy gódnotow měś: numeriske, znamuškowe rjeśazki a formule. Kuždy typ ma swóje metody set a get:

Typ | Get Method | Set Method
--- | --- | ---
Numeriski | getValue() | setValue(newValue)
Tekst | getString() | setString(newString)
Formula | getFormula() | setFormula(newFormula)

Datumowa a pjenjezne gódnoty se w Calc ako numeriske gódnoty naglědaju.

Slědujuce pśikład numeriskej gódnośe do celeju "A1" a "A2" zapódawa a zasajźujo formulu do cele "A3", kótaraž multiplikaciju toś teju gódnotowu wrośa.

        oSheet = ThisComponent.CurrentController.getActiveSheet()
        oCell = oSheet.getCellRangeByName("A1")
        oCell.setValue(10)
        oCell = oSheet.getCellRangeByName("A2")
        oCell.setValue(20)
        oCell = oSheet.getCellRangeByName("A3")
        oCell.setFormula("=A1*A2")

## Pśistup k wobceŕkam w rozdźělnych tabelach

Pjerwjejšne pśikłady jano aktiwnu tabelu wužywaju, aby operacije wuwjadli. Z pomocu jich indeksow abo mjenjow jo pśistup k celowym wobceŕkam w rozdźělnych tabelach móžny.

Slědujucy pśikład numerisku gódnotu do cele "A1" tabele z mjenim „Sheet2“ zapódawa.

        oSheet = ThisComponent.Sheets.getByName("Sheet2")
        oCell = oSheet.getCellRangeByName("A1")
        oCell.setValue(123)

Toś ten pśikład dajo se teke w Python ako slědujo implementěrowaś:

        doc = XSCRIPTCONTEXT.getDocument()
        sheet = doc.Sheets["Sheet2"]
        cell = sheet.getCellRangeByName("A1")
        cell.setValue(123)

Pśistup k tabelam jo teke z pomocu nulobazěrowanych indeksow móžny, kótarež pódawaju, kótara tabela se źiwajo na pórěd, w kótaremž se w dataji Calc zjawiju, pokazujo.

Wužywajśo w Basic metodu Sheets(sheetIndex) město metody getByName, ako se dołojce pokazujo:

        oSheet = ThisComponent.Sheets(0)

To dajo se na pódobnu wašnju w Python pśewjasć:

        sheet = doc.Sheets[0]

## Biblioteku ScriptForge wužywaś

Słužba Calc biblioteki ScriptForge dajo se wužywaś, aby celowe gódnoty ako slědujo dostała a stajiła:

        ' Zacytajo biblioteku ScriptForge
        GlobalScope.BasicLibraries.LoadLibrary("ScriptForge")
        ' Dostawa pśistup k aktualnemu dokumentoju Calc
        oDoc = CreateScriptService("Calc")
        ' Staja gódnotu celow A1 a A2
        oDoc.setValue("A1", "Hello")
        oDoc.setValue("A2", 123)

Metoda setValue dajo se wužywaś, aby numeriske ako teke tekstowe gódnoty stajiła. Aby celowu formulu póstajił, wužywajśo metodu setFormula.

Ze słužbu Calc móžośo z jadnučkeju kodoweju smužku celowe gódnoty wótwołaś a stajiś. Slědujucy pśikład gódnotu ze cele "A1" wótwołujo a pokazujo ju w zdźěleńskem pólu.

        Dim val as Variant, oDoc as Object
        oDoc = CreateScriptService("Calc")
        val = oDoc.getValue("A1")
        MsgBox val

Biblioteka ScriptForge pśistup k wobceŕkam w rozdźělnych tabelach wólažcujo, ako se w slědujucem pśikłaźe pokazujo:

        Dim val1, val2
        ' Wótwołujo celu "A1" z tabele z mjenim "Sheet1"
        val1 = oDoc.getValue("Sheet1.A1")
        ' Wótwołujo celu "B3" z tabele z mjenim "Sheet2"
        val2 = oDoc.getValue("Sheet2.B3")
        ' Placěrujo wuslědk do cele "A1" tabele "Report"
        Dim result : result = val1 * val2
        oDoc.setValue("Report.A1", result)

Pśikłady górjejce daju se teke w Python ako slědujo implementěrowaś:

        from scriptforge import CreateScriptService
        doc = CreateScriptService("Calc")
        doc.setValue("A1", "Hello")

        doc = CreateScriptService("Calc")
        bas = CreateScriptService("Basic")
        val = doc.getValue("A1")
        bas.MsgBox(val)

        first_val = doc.getValue("Sheet1.A1")
        second_val = doc.getValue("Sheet2.B3")
        result = first_val * second_val
        doc.setValue("Report.A1", result)

Pódobne temy

The ScriptForge Library

SFDocuments.Calc service

Programěrowanje ze skriptami Python

Pšosym pódprějśo nas!