Pagbasa at Pagsulat ng mga halaga sa Ranges

Ang mga macro sa LibreOffice Calc ay madalas na kailangang magbasa at magsulat ng mga halaga mula/sa mga sheet. Inilalarawan ng pahina ng tulong na ito ang iba't ibang mga diskarte sa pag-access sa mga sheet at hanay upang basahin o isulat ang kanilang mga halaga.

note

Ang lahat ng mga halimbawang ipinakita sa pahinang ito ay maaaring ipatupad pareho sa Basic at Python.


Pag-access sa Isang Cell

Ang halimbawa sa ibaba ay naglalagay ng numeric na halaga 123 sa cell "A1" ng kasalukuyang sheet.


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

Ang parehong ay maaaring magawa sa Python:


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

Tandaan na sa mga nakaraang halimbawa ang cell ay na-access gamit ang pangalan ng saklaw na "A1". Posible ring i-access ang mga cell gamit ang mga indeks na parang ang sheet ay isang matrix kung saan ang mga column at row ay na-index simula sa zero.

Magagawa ito gamit ang getCellByPosition(colIndex, rowIndex) paraan, na tumatagal sa isang column at isang row index. Binabago ng halimbawa sa ibaba sa Basic ang text value sa cell na "C1" (column 2, row 0).


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

Ang halimbawang ito ay maaari ding ipatupad sa Python tulad ng sumusunod:


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

Ang pangunahing pagkakaiba sa pagitan ng Python at Basic na mga script ay nakasalalay sa kung paano makakuha ng access sa sheet object sa pamamagitan ng paggamit ng XSCRIPTCONTEXT variable ng konteksto. Pagkatapos nito, ang lahat ng mga pamamaraan at katangian ay magkapareho sa Basic at Python.


Mga Halaga, String at Formula

Ang mga cell ng Calc ay maaaring magkaroon ng tatlong uri ng mga halaga: numeric, string at formula. Ang bawat uri ay may sariling set at makakuha ng mga pamamaraan:

Type

Get Method

Set Method

Numeric

getValue()

setValue(newValue)

Text

getString()

setString(newString)

Formula

getFormula()

setFormula(newFormula)


note

Ang mga petsa at halaga ng pera ay itinuturing bilang mga numerong halaga sa Calc.


Ang sumusunod na halimbawa ay naglalagay ng mga numerong halaga sa mga cell na "A1" at "A2" at naglalagay ng formula sa cell na "A3" na nagbabalik ng multiplikasyon ng mga halagang ito.


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

Pag-access sa Mga Saklaw sa Iba't Ibang Sheet

Ginamit lamang ng mga nakaraang halimbawa ang aktibong sheet upang magsagawa ng mga operasyon. Posibleng ma-access ang mga hanay ng cell sa iba't ibang mga sheet sa pamamagitan ng kanilang mga indeks o pangalan.

Ang halimbawa sa ibaba ay naglalagay ng numeric na halaga sa cell "A1" ng sheet na pinangalanang "Sheet2".


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

Ang halimbawang ito ay maaari ding ipatupad sa Python tulad ng sumusunod:


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

Maa-access din ang mga sheet gamit ang zero-based na mga indeks na nagsasaad kung aling sheet ang isinasaalang-alang ang pagkakasunud-sunod ng paglitaw ng mga ito sa Calc file.

Sa Basic, sa halip na gamitin ang getByName paraan, gamit Mga Sheet(sheetIndex) tulad ng ipinapakita sa susunod:


    oSheet = ThisComponent.Sheets(0)
  

Magagawa ito sa katulad na paraan sa Python:


    sheet = doc.Sheets[0]
  

Gamit ang ScriptForge Library

Ang serbisyo ng Calc ng library ng ScriptForge ay maaaring gamitin upang makakuha at magtakda ng mga halaga ng cell tulad ng sumusunod:


    

' Nilo-load ang library ng ScriptForge

GlobalScope.BasicLibraries.LoadLibrary("ScriptForge")

' Nakakakuha ng access sa kasalukuyang dokumento ng Calc

oDoc = CreateScriptService("Calc")

' Itinatakda ang halaga ng mga cell A1 at A2

oDoc.setValue("A1", "Hello")

oDoc.setValue("A2", 123)

note

Ang setValue paraan ay maaaring gamitin upang itakda ang parehong numero at mga halaga ng teksto. Upang magtakda ng cell formula, gamitin ang setFormula paraan.


Sa serbisyo ng Calc, ang pagkuha at pagtatakda ng mga halaga ng cell ay maaaring gawin gamit ang isang linya ng code. Nakukuha ng halimbawa sa ibaba ang halaga mula sa cell na "A1" at ipinapakita ito sa isang kahon ng mensahe.


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

Ginagawa rin ng library ng ScriptForge na mas simple ang pag-access ng mga saklaw sa iba't ibang mga sheet, tulad ng ipinakita sa halimbawa sa ibaba:


    Dim val1, val2
    ' Nakukuha ang cell na "A1" mula sa sheet na pinangalanang "Sheet1"
    val1 = oDoc.getValue("Sheet1.A1")
    ' Nakukuha ang cell na "B3" mula sa sheet na pinangalanang "Sheet2"
    val2 = oDoc.getValue("Sheet2.B3")
    ' Inilalagay ang resulta sa cell "A1" ng sheet na "Ulat"
    Dim result : result = val1 * val2
    oDoc.setValue("Report.A1", result)
  

Ang mga halimbawa sa itaas ay maaari ding ipatupad sa Python tulad ng sumusunod:


    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)
  

Mangyaring suportahan kami!