Branje in pisanje vrednosti v obsegih

Makri v LibreOffice Calc morajo pogosto brati in pisati vrednosti iz/na delovne liste. Ta stran pomoči opisuje različne pristope za dostop do delovnih listov in obsegov, da lahko beremo in zapisujemo njihove vrednosti.

note

Vse na tej strani predstavljene primere lahko implementirate v Basicu in Pythonu.


Dostop do posamezne celice

Spodnji primer vnese številsko vrednost 123 v celico »A1« na trenutnem delovnem listu.


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

Isto lahko dosežemo v Pythonu:


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

Upoštevajte, da v prejšnjih primerih dostop do celice poteka z imenom obsega »A1«. Prav tako je do celic možno dostopati z uporabo indeksov, kot da je delovni list matrika, kjer so stolpci in vrstice indeksirani od nič naprej.

To lahko opravimo z metodo getCellByPosition(colIndex, rowIndex), ki vzame za argument indeks stolpca in vrstice. Spodnji primer v Basicu spremeni besedilno vrednost v celici »C1« (stolpec 2, vrstica 0).


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

Ta primer lahko implementiramo tudi v Pythonu na sledeč način:


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

Glavna razlika med skripti Python in Basic je v načinu dostopa do predmeta delovnega lista z uporabo kontekstne spremenljivke XSCRIPTCONTEXT. Zatem so vse metode in lastnosti v Basicu in Pythonu identične.


Vrednosti, nizi in formule

Celice v preglednicah Calc imajo lahko tri vrste vrednosti: števila, nize in formule. Vsaka teh vrst ima lastni metodi določanja in pridobivanja:

Vrsta

Get Method

Set Method

Številska

getValue()

setValue(newValue)

Besedilo

getString()

setString(newString)

Formula

getFormula()

setFormula(newFormula)


note

Datumske in valutne vrednosti v programu Calc štejejo za številske.


Naslednji primer vnese številski vrednosti v celici »A1« in »A2« ter formulo v celico »A3«, ki vrne zmnožek njunih vrednosti.


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

Dostop do obsegov na različnih delovnih listih

Prejšnji primeri so za izvajanje operacij uporabljali le dejavni delovni list. Do obsegov celic lahko dostopate tudi na različnih delovnih listih, tako da uporabite njihove indekse ali imena.

Spodnji primer vnese številsko vrednost v celico »A1« na delovnem listu z imenom »Sheet2«.


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

Ta primer lahko implementiramo tudi v Pythonu na sledeč način:


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

Do delovnih listov lahko dostopamo tudi z indeksi na osnovi nič, ki nakazujejo, za kateri delovni list po vrsti glede na zaporedje v datoteki Calc gre.

V Basicu namesto metode getByName uporabite Sheets(indeksDelovnegaLista), kot je prikazano v nadaljevanju:


    oSheet = ThisComponent.Sheets(0)
  

To lahko opravimo na podoben način v Pythonu:


    sheet = doc.Sheets[0]
  

Z uporabo knjižnice ScriptForge

Storitev Calc knjižnice ScriptForge lahko uporabimo za pridobivanje (get) in določanje (set) vrednosti celic na sledeč način:


    

' Naloži knjižnico ScriptForge

GlobalScope.BasicLibraries.LoadLibrary("ScriptForge")

' Pridobi dostop do trenutnega dokumenta Calc

oDoc = CreateScriptService("Calc")

' Določi vrednost celic A1 in A2

oDoc.setValue("A1", "Hello")

oDoc.setValue("A2", 123)

note

Metodo setValue lahko uporabimo za določitev tako številskih kot besedilnih vrednosti. Za določitev formule v celici uporabite metodo setFormula.


S storitvijo Calc je pridobivanje in določanje vrednosti celic možno opraviti z eno samo vrstico kode. Spodnji primer pridobi vrednosti iz celice »A1« in jo prikaže v oknu s sporočilom.


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

Knjižnica ScriptForge tudi olajša dostop do obsegov na različnih delovnih listih, kar demonstrira spodnji primer:


    Dim val1, val2
    ' Pridobi celico »A1« iz delovnega lista z imenom »Sheet1«
    val1 = oDoc.getValue("Sheet1.A1")
    ' Pridobi celico »B3« iz delovnega lista z imenom »Sheet2«
    val2 = oDoc.getValue("Sheet2.B3")
    ' Postavi rezultat v celico »A1« delovnega lista »Report«
    Dim result : result = val1 * val2
    oDoc.setValue("Report.A1", result)
  

Zgornje primere lahko implementiramo tudi v Pythonu na sledeč način:


    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)
  

Podprite nas!