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ł.

note

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")
  
note

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)


note

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)

note

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šosym pódprějśo nas!