Isi
Indeks 🔎︎

# Membaca dan Menulis nilai ke Rentang

Macro di LibreOffice Calc sering kali perlu membaca dan menulis nilai dari/ke lembar. Halaman bantuan ini menjelaskan berbagai pendekatan untuk mengakses lembar dan rentang untuk membaca atau menulis nilainya.

Semua contoh yang ditunjukkan dalam halaman ini dapat mengimplementasikan keduanya di Basic dan Python.

## Mengakses Sel Tunggal

Contoh di bawah memasukkan nilai angka 123 ke dalam sel "A1" dari lembar saat ini.

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

Hal yang sama dapat dilakukan dengan Python:

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

Perhatikan bahwa dalam contoh sebelumnya sel diakses menggunakan nama rentangnya "A1". Dimungkinkan juga untuk mengakses sel menggunakan indeks seolah-olah lembar itu adalah matriks di mana kolom dan baris diindeks mulai dari nol.

Ini dapat dilakukan dengan menggunakan metode getCellByPosition(colIndex, rowIndex), yang menggunakan indeks kolom dan baris. Contoh di bawah ini di Basic mengubah nilai teks di sel "C1" (kolom 2, baris 0).

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

Contoh ini juga dapat diimplementasikan dengan Python sebagai berikut:

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

Perbedaan utama antara skrip Python dan Basic terletak pada cara mendapatkan akses ke objek sheet dengan menggunakan variabel konteks XSCRIPTCONTEXT. Setelah itu, semua metode dan properti identik di Basic dan Python.

## Nilai, String, dan Rumus

Sel Calc dapat memiliki tiga jenis nilai: numerik, string, dan rumus. Setiap jenis memiliki metode set dan get sendiri:

Jenis | Get Method | Set Method
--- | --- | ---
numerik | getValue() | setValue(newValue)
Teks | getString() | setString(newString)
Rumus | getFormula() | setFormula(newFormula)

Tanggal dan nilai mata uang dianggap sebagai nilai numerik di Calc.

Contoh berikut memasukkan nilai numerik ke dalam sel "A1" dan "A2" dan menyisipkan rumus di sel "A3" yang mengembalikan perkalian nilai-nilai ini.

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

## Mengakses Rentang di Lembar yang Berbeda

Contoh sebelumnya hanya menggunakan lembar aktif untuk melakukan operasi. Dimungkinkan untuk mengakses rentang sel di lembar yang berbeda dengan indeks atau nama mereka.

Contoh di bawah ini memasukkan nilai numerik ke dalam sel "A1" dari lembar bernama "Sheet2".

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

Contoh ini juga dapat diimplementasikan dengan Python sebagai berikut:

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

Lembar juga dapat diakses menggunakan indeks berbasis nol yang menunjukkan lembar mana yang mempertimbangkan urutan kemunculannya dalam file Calc.

Di Basic, daripada menggunakan metode getByName, gunakan Sheets(sheetIndex) seperti yang ditunjukkan berikut ini:

        oSheet = ThisComponent.Sheets(0)

Ini dapat dilakukan dengan cara yang sama dengan Python:

        sheet = doc.Sheets[0]

## Menggunakan Pustaka ScriptForge

Layanan Calc dari perpustakaan ScriptForge dapat digunakan untuk mendapatkan dan mengatur nilai sel sebagai berikut:

        ' Memuat perpustakaan ScriptForge
        GlobalScope.BasicLibraries.LoadLibrary("ScriptForge")
        ' Mendapat akses ke dokumen Calc saat ini
        oDoc = CreateScriptService("Calc")
        ' Mengatur nilai sel A1 dan A2
        oDoc.setValue("A1", "Hello")
        oDoc.setValue("A2", 123)

Metode setValue dapat digunakan untuk menyetel nilai numerik dan teks. Untuk menyetel rumus sel, gunakan metode setFormula.

Dengan layanan Calc, mendapatkan dan mengatur nilai sel dapat dilakukan dengan satu baris kode. Contoh di bawah ini mendapatkan nilai dari sel "A1" dan menunjukkannya pada kotak pesan.

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

Pustaka ScriptForge juga membuatnya lebih mudah untuk mengakses rentang di lembar yang berbeda, seperti yang ditunjukkan pada contoh di bawah ini:

        Dim val1, val2
        ' Mendapat sel "A1" dari lembar bernama "Sheet1"
        val1 = oDoc.getValue("Sheet1.A1")
        ' Mendapat sel "B3" dari lembar bernama "Sheet2"
        val2 = oDoc.getValue("Sheet2.B3")
        ' Tempatkan hasilnya ke dalam sel "A1" dari lembar "Laporan"
        Dim result : result = val1 * val2
        oDoc.setValue("Report.A1", result)

Contoh di atas juga dapat diimplementasikan dengan Python sebagai berikut:

        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)

Topik Terkait

Pustaka ScriptForge

SFDocuments.Calc service

Pemrograman dengan Skrip Python