Barrutietako balioak irakurtzea eta idaztea

LibreOffice Calc aplikazioko makroek sarritan orrietako balioak irakurtzea eta idaztea behar dute. Laguntza-orri honetan orriak eta barrutiak atzitzeko zenbait modu deskribatzen dira.

note

Orri honetako adibide guztiak bai Basic bai Python erabilita inplementatu daitezke.


Gelaxka bakarra atzitzea

Beheko adibidean 123 zenbakizko balioa uneko orriko "A1" gelaxkan sartzen da.


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

Python bidez ekintza bera gauzatzeko:


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

Kontuan izan, aurreko adibideetan, gelaxka atzitzeko bere barruti-izena erabili dela, "A1" alegia. Posible da gelaxkak atzitzeko indizeak erabiltzea, orria zeron hasten diren zutabeen eta errenkaden matrize bat bailitzan.

Hori egiteko, getCellByPosition(zutabeIndizea, errenkadaIndizea) metodoa erabili daiteke, zutabe baten eta errenkada baten indizea hartuta. Beheko adibideak, Basic lengoaian, "C1" (2 zutabea, 0 errenkada) gelaxkako testu-balioa aldatzen du.


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

Adibide hori Python erabilita ere inplementatu daiteke, hurrengo moduan:


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

Python eta Basic scripten arteko desberdintasun nagusia da nola atzitzen duten orri-objektua XSCRIPTCONTEXT testuinguru-aldagaiaren bidez. Horren ondoren, metodo eta propietate guztiak berdinak dira, Basic zein Python erabili.


Balioak, kateak eta formulak

Calc gelaxkek hiru balio mota dituzte: zenbakizkoak, kateak eta formulak. Mota bakoitzak balioa ezartzeko eta eskuratzeko metodoak ditu:

Mota

Get Method

Set Method

Zenbakia

getValue()

setValue(newValue)

Testua

getString()

setString(newString)

Formula

getFormula()

setFormula(newFormula)


note

Calc-en, datak eta monetak zenbakizko baliotzat hartzen dira.


Hurrengo adibidean, zenbakizko balioak sartzen dira "A1" eta "A2" gelaxketan eta bi balio horien biderketa itzultzen duen formula bat txertatzen da "A3" gelaxkan.


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

Orri anitzetako barrutiak atzitzea

Aurreko adibideetan, orri aktiboa soilik erabili da eragiketak gauzatzeko. Posible da beste orri batzuetako gelaxka-barrutiak atzitzea haien indizeak edo izenak erabilita.

Beheko adibidean, zenbakizko balio bat sartzen da "Sheet2" orriko "A1" gelaxkan.


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

Adibide hori Python lengoaian ere inplementatu daiteke, honako moduan:


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

Orriak atzitzeko, zeron oinarritutako indizeak ere erabili daitezke, Calc fitxategian orriak agertzen diren ordena kontuan hartuta.

Basic lengoaian, getByName metodoa erabili ordez, erabili Sheets(sheetIndex), ondoren erakusten den moduan:


    oSheet = ThisComponent.Sheets(0)
  

Python lengoaian ere antzeko modu bat dago hori egiteko:


    sheet = doc.Sheets[0]
  

ScriptForge liburutegia erabiliz

ScriptForge liburutegiko Calc zerbitzuarekin gelaxka-balioak eskuratzeko eta ezartzeko:


    

' ScriptForge liburutegia kargatzen du

GlobalScope.BasicLibraries.LoadLibrary("ScriptForge")

' Uneko Calc dokumentua atzitzen du

oDoc = CreateScriptService("Calc")

' A1 eta A2 gelaxken balioa ezartzen du

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

oDoc.setValue("A2", 123)

note

setValue metodoa zenbakizko balioak zein testu-balioak ezartzeko erabili daiteke. Gelaxka-formula bat ezartzeko, erabili setFormula metodoa.


Calc zerbitzuarekin, gelaxka-balioak kode-lerro bakarrarekin eskuratu eta ezarri daitezke. Beheko adibidean, "A1" gelaxkako balioa hartzen da eta mezu-koadro batean erakusten da.


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

ScriptForge liburutegiari esker, sinpleagoa da orri anitzetako barrutiak atzitzea, beheko adibidean ikusten den moduan:


    Dim val1, val2
    ' "Sheet1" izeneko "A1" gelaxka eskuratzen du
    val1 = oDoc.getValue("Sheet1.A1")
    ' "Sheet2" izeneko "B3" gelaxka eskuratzen du
    val2 = oDoc.getValue("Sheet2.B3")
    ' "Report" orriko "A1" gelaxkan kokatzen du emaitza
    Dim result : result = val1 * val2
    oDoc.setValue("Report.A1", result)
  

Goiko adibidea Python erabilita ere inplementatu daiteke, hurrengo moduan:


    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)
  

Emaguzu laguntza!