Wobsah

# Hódnoty do wobłukow čitać a pisać

Makra w LibreOfficeDev Calc husto dyrbja hódnoty z/do tabelow čitać a pisać. Tuta strona pomocy wšelake wašnja postupowanja wopisuje, přistup k tabelam a wobłukam dóstać, zo byšće jich hódnoty čitał abo pisał.

Wšě přikłady, kotrež so na tutej stronje předstajeja, dadźa so do Basic kaž tež do Python implementować.

## Přistup k jednotliwej celi

Slědowacy přikład numerisku hódnotu 123 do cele "A1" aktualneje tabele zapodawa.

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

Samsne da so z Python docpěć:

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

Dźiwajće na to, zo předchadne přikłady z pomocu wobłukoweho mjena "A1" přistup k celi maja. Přistup k celam je tež móžny, hdyž indeksy wužiwaće, kaž by tabela matriks była, hdźež špalty a linki su wot nul indikowane.

Móžeće to z pomocu metody getCellByPosition(colIndex, rowIndex) činić, kotraž špaltowy a linkowy indeks přijima. Slědowacy přikład w Basic tekstowu hódnotu w celi "C1" (špalta 2, linka 0) měnja.

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

Tutón přikład da so tež w Python takle implementować:

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

Hłowny rozdźěl mjez skriptami Python a Basic w tym wobsteji, kak móžeće přistup k tabelowemu objektej z pomocu kontekstoweje wariable XSCRIPTCONTEXT dóstać. Po tym su wšě metody a kajkosće w Basic a Python identiske.

## Hódnoty, znamješkowe rjećazki a formle

Cele Calc móža tři typy hódnotow měć: numeriske, znamješkowe rjećazki a formle. Kóždy typ ma swoje metody set a get:

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

W Calc maja datumowe a měnowe hódnoty za numeriske hódnoty.

Slědowace přikład numeriskej hódnoće do celeju "A1" a "A2" zapodawa a zasadźuje formlu do cele "A3", kotraž multiplikaciju tuteju hódnotow wróć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 wobłukam w rozdźělnych tabelach

Předchadne přikłady jenož aktiwnu tabelu wužiwaja, zo bychu operacije wuwjedli. Z pomocu jich indeksow abo mjenow je přistup k celowym wobłukam w rozdźělnych tabelach móžny.

Slědowacy přikład numerisku hódnotu do cele "A1" tabele z mjenom „Sheet2“ zapodawa.

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

Tutón přikład da so tež w Python takle implementować:

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

Přistup k tabelam je tež z pomocu nulobazowanych indeksow móžny, kotrež podawaja, kotra tabela so dźiwajo na porjad, w kotrymž so w dataji Calc jewja, pokazuje.

Wužiwajće w Basic metodu Sheets(sheetIndex) město metody getByName, kaž so deleka pokazuje:

        oSheet = ThisComponent.Sheets(0)

To da so na podobne wašnje w Python přewjesć:

        sheet = doc.Sheets[0]

## Biblioteku ScriptForge wužiwać

Słužba Calc biblioteki ScriptForge da so wužiwać, zo by celowe hódnoty takle dóstała a stajiła:

        ' Začita biblioteku ScriptForge
        GlobalScope.BasicLibraries.LoadLibrary("ScriptForge")
        ' Dóstawa přistup k aktualnemu dokumentej Calc
        oDoc = CreateScriptService("Calc")
        ' Staja hódnotu celow A1 a A2
        oDoc.setValue("A1", "Hello")
        oDoc.setValue("A2", 123)

Metoda setValue da so wužiwać, zo by numeriske kaž tež tekstowe hódnoty stajiła. Zo byšće celowu formlu postajił, wužiwajće metodu setFormula.

Ze słužbu Calc móžeće z jeničkej kodowej linku celowe hódnoty wotwołać a stajić. Slědowacy přikład hódnotu ze cele "A1" wotwołuje a pokazuje ju w zdźělenskim polu.

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

Biblioteka ScriptForge přistup k wobłukam w rozdźělnych tabelach wosnadnja, kaž so w slědowacym přikładźe pokazuje:

        Dim val1, val2
        ' Wotwołuje celu "A1" z tabele z mjenom "Sheet1"
        val1 = oDoc.getValue("Sheet1.A1")
        ' Wotwołuje celu "B3" z tabele z mjenom "Sheet2"
        val2 = oDoc.getValue("Sheet2.B3")
        ' Placěruje wuslědk do cele "A1" tabele "Report"
        Dim result : result = val1 * val2
        oDoc.setValue("Report.A1", result)

Přikłady horjeka dadźa so tež w Python takle implementować:

        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)

Podobne temy

Biblioteka ScriptForge

Słužba SFDocuments.Calc

Programowanje ze skriptami Python

Prošu podpěrajće nas!