Помощ за LibreOffice 25.2
В макросите за LibreOffice Calc често се налага да се четат и записват стойности от/в листовете. Тази страница от помощта описва различните подходи за достъп до листове и диапазони, за да се четат и записват стойности в тях.
Всички представени в страницата примери могат да се реализират и на Basic, и на Python.
Долният пример въвежда числовата стойност 123 в клетката "A1" на текущия лист.
    Dim oSheet as Object
    Dim oCell as Object
    oSheet = ThisComponent.CurrentController.getActiveSheet()
    oCell = oSheet.getCellRangeByName("A1")
    oCell.setValue(123)
  Същото може да се постигне с Python:
    doc = XSCRIPTCONTEXT.getDocument()
    sheet = doc.getCurrentController().getActiveSheet()
    cell = sheet.getCellRangeByName("A1")
    cell.setValue(123)
  Обърнете внимание, че в предишните примери достъпът до клетката е чрез името на диапазона ѝ "A1". Достъп до клетките може да се осъществява и чрез индекси, все едно листът е матрица, чиито колони и редове са индексирани от нула.
Това може да се постигне чрез метода getCellByPosition(colIndex, rowIndex), който приема индекс на колона и индекс на ред. Долният пример на Basic сменя текстовата стойност в клетката "C1" (колона 2, ред 0).
    oSheet = ThisComponent.CurrentController.getActiveSheet()
    oCell = oSheet.getCellByPosition(2, 0)
    oCell.setString("Hello")
  Този пример може да бъде реализиран и на Python, както следва:
    doc = XSCRIPTCONTEXT.getDocument()
    sheet = doc.getCurrentController().getActiveSheet()
    cell = sheet.getCellByPosition(2, 0)
    cell.setString("Hello")
  Основната разлика между скриптовете на Python и на Basic е в начина на получаване на достъп до обекта лист чрез променливата за контекст XSCRIPTCONTEXT. След това всички методи и свойства са идентични в Basic и в Python.
Клетките могат да имат три типа стойности: числа, низове и формули. Всеки тип има собствени методи за задаване (set) и извличане (get):
| Тип | Get Method | Set Method | 
|---|---|---|
| Числа | getValue() | setValue(newValue) | 
| Текст | getString() | setString(newString) | 
| Формула | getFormula() | setFormula(newFormula) | 
Датите и валутните стойности в Calc се смятат за числови стойности.
Следният пример въвежда числови стойности в клетките "A1" и "A2", след което вмъква в клетката "A3" формула, която връща произведението на тези стойности.
    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")
  В предишните примери операциите се извършват само в рамките на активния лист. Възможно е да се осъществява достъп до диапазони от клетки в други листове по техните индекси или имена.
Следващият пример въвежда числова стойност в клетката "A1" на лист с име "Sheet2".
    oSheet = ThisComponent.Sheets.getByName("Sheet2")
    oCell = oSheet.getCellRangeByName("A1")
    oCell.setValue(123)
  Този пример може да бъде реализиран и на Python, както следва:
    doc = XSCRIPTCONTEXT.getDocument()
    sheet = doc.Sheets["Sheet2"]
    cell = sheet.getCellRangeByName("A1")
    cell.setValue(123)
  Достъп до листовете може да се осъществява и чрез започващи от нула индекси, като те се индексират в реда, в който са подредени във файла на Calc.
В Basic вместо метода getByName използвайте Sheets(sheetIndex), както е показано тук:
    oSheet = ThisComponent.Sheets(0)
  Това може да се направи по подобен начин в Python:
    sheet = doc.Sheets[0]
  Услугата Calc на библиотеката ScriptForge може да се използва за задаване и извличане стойности на клетки, както следва:
    ' Зарежда библиотеката ScriptForge.
    GlobalScope.BasicLibraries.LoadLibrary("ScriptForge")
    ' Получава достъп до текущия документ на Calc.
    oDoc = CreateScriptService("Calc")
    ' Задава стойността на клетките A1 и A2.
    oDoc.setValue("A1", "Hello")
    oDoc.setValue("A2", 123)
  Методът setValue може да се използва за задаване и на числови, и на текстови стойности. За да зададете формула в клетка, използвайте метода setFormula.
С услугата Calc извличането и задаването на стойности на клетки може да се извършва с един ред код. Примерът по-долу извлича стойността от клетката "A1" и я показва в прозорец за съобщение.
    Dim val as Variant, oDoc as Object
    oDoc = CreateScriptService("Calc")
    val = oDoc.getValue("A1")
    MsgBox val
  Библиотеката ScriptForge улеснява и достъпа до диапазони в различни листове, както е показано в долния пример:
    Dim val1, val2
    ' Извлича клетката "A1" от листа с име "Sheet1".
    val1 = oDoc.getValue("Sheet1.A1")
    ' Извлича клетката "B3" от листа с име "Sheet2".
    val2 = oDoc.getValue("Sheet2.B3")
    ' Поставя резултата в клетката "A1" на листа "Report".
    Dim result : result = val1 * val2
    oDoc.setValue("Report.A1", result)
  Горните примери могат да бъдат реализирани и на Python, както следва:
    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)