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.

note

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

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)


note

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)

note

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)
  

Mohon dukung kami!