Edukiak
Indizea 🔎︎

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

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

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)

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)

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)

Erlazionatutako gaiak

ScriptForge liburutegia

SFDocuments.Calc zerbitzua

Python scriptekin programatzea