LibreOffice 24.8 Bantuan
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.
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.
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")
  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]
  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)