Ανάγνωση και εγγραφή τιμών σε περιοχές

Οι μακροεντολές στο LibreOffice Calc συχνά χρειάζονται ανάγνωση και εγγραφή τιμών από/σε φύλλα. Αυτή η σελίδα βοήθειας περιγράφει τις διάφορες προσεγγίσεις για την πρόσβαση σε φύλλα και περιοχές για ανάγνωση ή εγγραφή των τιμών τους.

note

Όλα τα παραδείγματα που παρουσιάζονται σε αυτή τη σελίδα μπορούν να υλοποιηθούν τόσο σε 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")
  
note

Η κύρια διαφορά μεταξύ των σεναρίων Python και Basic έγκειται στον τρόπο απόκτησης πρόσβασης στο αντικείμενο φύλλου χρησιμοποιώντας τη μεταβλητή περιβάλλοντος XSCRIPTCONTEXT. Μετά από αυτό, όλες οι μέθοδοι και οι ιδιότητες είναι πανομοιότυπες σε Basic και Python.


Τιμές, συμβολοσειρές και τύποι

Τα κελιά Calc μπορούν να έχουν τρεις τύπους τιμών: αριθμητικές, συμβολοσειρές και τύπους. Κάθε τύπος έχει το δικό του σύνολο και μεθόδους λήψης:

Τύπος

Get Method

Set Method

Αριθμητικό

getValue()

setValue(newValue)

Κείμενο

getString()

setString(newString)

Τύπος

getFormula()

setFormula(newFormula)


note

Οι ημερομηνίες και οι τιμές νομισμάτων θεωρούνται ως αριθμητικές τιμές στο 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" του φύλλου που ονομάζεται "Φύλλο2".


    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]
  

Με χρήση της Βιβλιοθήκης ScriptForge

Η υπηρεσία Calc της βιβλιοθήκης ScriptForge μπορεί να χρησιμοποιηθεί για τη λήψη και τον ορισμό τιμών κελιών ως εξής:


    

' Φορτώνει τη βιβλιοθήκη ScriptForge

GlobalScope.BasicLibraries.LoadLibrary("ScriptForge")

' Αποκτά πρόσβαση στο τρέχον έγγραφο Calc

oDoc = CreateScriptService("Calc")

' Ορίζει την τιμή των κελιών A1 και A2

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

oDoc.setValue("A2", 123)

note

Η μέθοδος 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)
  

Παρακαλούμε, υποστηρίξτε μας!