Περιεχόμενα

# Πρόσθετο για προγραμματισμό στο LibreOffice Calc

Η μέθοδος επέκτασης του Calc με Πρόσθετα που περιγράφεται στα ακόλουθα είναι ξεπερασμένη. Τα περιβάλλοντα είναι ακόμη έγκυρα και υποστηρίζονται για να εξασφαλισθεί η συμβατότητα με τα υπάρχοντα πρόσθετα, αλλά για προγραμματισμό νέων προσθέτων θα πρέπει να χρησιμοποιήσετε τις νέες συναρτήσεις API.

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

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

## Η έννοια του πρόσθετου

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

### Συναρτήσεις της Κοινόχρηστης βιβλιοθήκης Προσθέτων DLL

Οι διαχειριστικές συναρτήσεις που πρέπει να υπάρχουν τουλάχιστον είναι οι συναρτήσεις GetFunctionCount και GetFunctionData. Βάσει αυτών των συναρτήσεων, μπορούν να οριστούν οι συναρτήσεις, οι τύποι των παραμέτρων και οι τιμές επιστροφής. Όσον αφορά τις τιμές επιστροφής, υποστηρίζονται οι τύποι Διπλή και Συμβολοσειρά. Ως παράμετροι, επιπλέον υποστηρίζονται οι περιοχές κελιών Double Array, String Array, και Cell Array.

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

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

Η κλήση των συναρτήσεων γίνεται με συγχρονισμό και η επιστροφή των αποτελεσμάτων είναι άμεση. Υπάρχει και η δυνατότητα εφαρμογής συναρτήσεων σε πραγματικό χρόνο (ασύγχρονες συναρτήσεις). Δεν εξηγούνται, ωστόσο, με λεπτομέρεια, διότι είναι εξαιρετικά πολύπλοκες.

## Γενικές πληροφορίες σχετικά με το περιβάλλον

Ο μέγιστος αριθμός παραμέτρων σε μια συνάρτηση πρόσθετου που επισυνάπτεται στο LibreOffice Calc είναι 16: μία τιμή επιστροφής και 15 παράμετροι εισαγωγής στη συνάρτηση το ανώτερο.

Οι τύποι των δεδομένων ορίζονται ως εξής:

Τύποι δεδομένων | Ορισμός
--- | ---
CALLTYPE | Σε περιβάλλον Windows: FAR PASCAL (_far _pascal) Σε άλλο περιβάλλον: προεπιλογή (προεπιλογή ανάλογα με το λειτουργικό σύστημα)
USHORT | Ακέραιος 2 byte χωρίς πρόσημο
DOUBLE | Μορφή 8 byte ανάλογα με την πλατφόρμα
Paramtype | Ανάλογα με την πλατφόρμα, όπως ο int PTR_DOUBLE =0 δείκτης σε τύπο διπλής ακρίβειας PTR_STRING =1 δείκτης σε συμβολοσειρά που καταλήγει σε 0 PTR_DOUBLE_ARR =2 δείκτης σε διπλό πίνακα PTR_STRING_ARR =3 δείκτης σε πίνακα συμβολοσειράς PTR_CELL_ARR =4 δείκτης σε πίνακα κελιών NONE =5

## Συναρτήσεις της κοινόχρηστης βιβλιοθήκης DLL

Παρακάτω, θα βρείτε περιγραφή αυτών των συναρτήσεων, που ονομάζονται στην κοινόχρηστη βιβλιοθήκη εξωτερικές DLL.

Για όλες τις συναρτήσεις Κοινόχρηστη βιβλιοθήκη DLL, ισχύουν τα παρακάτω:

void CALLTYPE fn(out, in1, in2, ...)

Έξοδος: Τελική τιμή

Είσοδος: Οποιοσδήποτε τύπος αριθμού (double&, char*, double*, char**, περιοχή κελιού), όπου η περιοχή κελιού είναι πίνακας τύπων διπλού πίνακα, πίνακα συμβολοσειράς, ή πίνακας κελιού.

### GetFunctionCount()

Επιστρέφει τον αριθμό των συναρτήσεων χωρίς τις διαχειριστικές συναρτήσεις της παραμέτρου αναφοράς. Κάθε συνάρτηση έχει έναν μοναδικό αριθμό μεταξύ του 0 και του nCount-1. Αυτός ο αριθμός είναι απαραίτητος, στη συνέχεια, για τις συναρτήσεις GetFunctionData και GetParameterDescription.

Σύνταξη

void CALLTYPE GetFunctionCount(USHORT& nCount)

Παράμετρος

USHORT &nCount:

Έξοδος: Αναφορά σε μεταβλητή, που υποτίθεται ότι περιέχει τον αριθμό των πρόσθετων συναρτήσεων. Παραδείγματος χάρη: Εάν το πρόσθετο δίνει 5 συναρτήσεις για το LibreOffice Calc, τότε nCount=5.

### GetFunctionData()

Προσδιορίζει όλες τις σημαντικές πληροφορίες για μια Πρόσθετη συνάρτηση.

Σύνταξη

void CALLTYPE GetFunctionData(USHORT& nNo, char* pFuncName, USHORT& nParamCount, Paramtype* peType, char* pInternalName)

Παράμετρος

USHORT& nNo:

Είσοδος: Αριθμός συνάρτησης μεταξύ 0 και nCount-1, συμπεριλαμβανόμενου.

char* pFuncName:

Έξοδος: Όνομα συνάρτησης όπως φαίνεται από τον προγραμματιστή, όπως ονομάζεται στην Κοινόχρηστη βιβλιοθήκη DLL. Αυτό το όνομα δεν καθορίζει το χρησιμοποιούμενο όνομα στον Οδηγό συναρτήσεων.

USHORT& nParamCount:

Έξοδος: Αριθμός παραμέτρων σε συνάρτηση προσθέτου. Αυτός ο αριθμός πρέπει να είναι μεγαλύτερος από 0, επειδή υπάρχει πάντα τελική τιμή· η μέγιστη τιμή είναι 16.

Paramtype* peType:

Έξοδος: Δείκτης σε πίνακα ακριβώς 16 μεταβλητών του τύπου Paramtype. Οι πρώτες καταχωρίσεις nParamCount συμπληρώνονται με τον κατάλληλο τύπο παραμέτρου.

char* pInternalName:

Έξοδος: Όνομα συνάρτησης όπως φαίνεται από τον χρήστη, όπως εμφανίζεται στον Οδηγό συναρτήσεων. Μπορεί να περιέχει διαλυτικά μεταφωνίας.

Οι παράμετροι pFuncName και pInternalName είναι πίνακες χαρακτήρων, οι οποίοι εφαρμόζονται με μέγεθος 256 στο LibreOffice Calc.

### GetParameterDescription()

Παρέχει μια σύντομη περιγραφή της συνάρτησης πρόσθετου και των παραμέτρων της. Ως επιλογή, αυτή η συνάρτηση μπορεί να χρησιμοποιηθεί για την εμφάνιση της περιγραφής μιας συνάρτησης και των παραμέτρων στον Οδηγό συνάρτησης.

Σύνταξη

void CALLTYPE GetParameterDescription(USHORT& nNo, USHORT& nParam, char* pName, char* pDesc)

Παράμετρος

USHORT& nNo:

Είσοδος: Αριθμός συνάρτησης στη βιβλιοθήκη· μεταξύ 0 και nCount-1.

USHORT& nParam:

Είσοδος: Δείχνει, για ποια παράμετρο παρέχεται η περιγραφή· οι παράμετροι ξεκινούν με 1. Εάν η nParam είναι 0, η ίδια η περιγραφή υποτίθεται ότι παρέχεται στο pDesc· σε αυτήν την περίπτωση το pName δεν έχει νόημα.

char* pName:

Έξοδος: Παίρνει το όνομα ή τον τύπο της παραμέτρου, π.χ., τη λέξη "Όνομα", ή "Συμβολοσειρά", ή "Ημερομηνία", κ.ο.κ. Εισήχθη στο LibreOffice Calc ως char[256].

char* pDesc:

Έξοδος: Παίρνει την περιγραφή της παραμέτρου, π.χ., "Τιμή, στην οποία θα μετρηθεί το άθροισμα" Υλοποιήθηκε στο LibreOffice Calc ως char[256].

Οι παράμετροι pName και pDesc είναι πίνακες χαρακτήρων. Εφαρμόζονται στο LibreOffice Calc με μέγεθος 256. Ο χώρος που είναι διαθέσιμος στον Οδηγό συνάρτησης είναι περιορισμένος και δεν είναι δυνατή η χρήση και των 256 χαρακτήρων.

## Περιοχές κελιών

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

### Διπλός πίνακας

Ως παράμετρος, μπορεί να μεταβιβαστεί μια περιοχή κελιών με τιμές τύπου Αριθμό/Διπλής. Ένα διπλός πίνακας στο LibreOffice Calc ορίζεται ως ακολούθως:

Μετατόπιση | Όνομα | Περιγραφή
--- | --- | ---
0 | Στήλη1 | Ο αριθμός της στήλης στην πάνω αριστερή γωνία της περιοχής κελιών. Η αρίθμηση ξεκινά από το 0.
2 | Γραμμή1 | Ο αριθμός της γραμμής στην πάνω αριστερή γωνία της περιοχής κελιών. Η αρίθμηση ξεκινά από το 0.
4 | Καρτέλα1 | Ο αριθμός του πίνακα στην πάνω αριστερή γωνία της περιοχής κελιών. Η αρίθμηση ξεκινά από το 0.
6 | Στήλη2 | Ο αριθμός στήλης στην κάτω δεξιά γωνία της περιοχής κελιών. Η αρίθμηση ξεκινά από το 0.
8 | Γραμμή2 | Ο αριθμός γραμμής στην κάτω δεξιά γωνία της περιοχής κελιών· η αρίθμηση ξεκινά από το 0.
10 | Καρτέλα2 | Ο αριθμός πίνακα στην κάτω δεξιά γωνία της περιοχής κελιών· η αρίθμηση ξεκινά από το 0.
12 | Μέτρηση | Ο αριθμός των ακόλουθων στοιχείων. Τα κενά κελιά δεν καταμετρούνται ή περνούν.
14 | Στήλη | Αριθμός στήλης του στοιχείου. Η αρίθμηση ξεκινά από το 0.
16 | Γραμμή | Αριθμός σειράς του στοιχείου. Η αρίθμηση ξεκινά από το 0.
18 | Καρτέλα | Αριθμός πίνακα του στοιχείου. Η αρίθμηση ξεκινά από το 0.
20 | Σφάλμα | Αριθμός σφάλματος, όπου η τιμή 0 καθορίζεται ως "όχι σφάλμα". Αν το στοιχείο προέρχεται από ένα κελί με τύπο η τιμή σφάλματος καθορίζεται από τον τύπο.
22 | Τιμή | Μεταβλητή IEEE 8 byte τύπου διπλής ακρίβειας/κινητής υποδιαστολής
30 | ... | Επόμενο στοιχείο

### Σειρά αλφαριθμητικών δεδομένων

Μια περιοχή κελιών, η οποία περιέχει τιμές με τύπο δεδομένων Κείμενο και χειρίζεται ως σειρά αλφαριθμητικών δεδομένων. Μία σειρά αλφαριθμητικών δεδομένων στο LibreOffice Calc καθορίζεται ως εξής:

Μετατόπιση | Όνομα | Περιγραφή
--- | --- | ---
0 | Στήλη1 | Ο αριθμός της στήλης στην πάνω αριστερή γωνία της περιοχής κελιών. Η αρίθμηση ξεκινά από το 0.
2 | Γραμμή1 | Ο αριθμός της γραμμής στην πάνω αριστερή γωνία της περιοχής κελιών. Η αρίθμηση ξεκινά από το 0.
4 | Καρτέλα1 | Ο αριθμός του πίνακα στην πάνω αριστερή γωνία της περιοχής κελιών. Η αρίθμηση ξεκινά από το 0.
6 | Στήλη2 | Ο αριθμός στήλης στην κάτω δεξιά γωνία της περιοχής κελιών. Η αρίθμηση ξεκινά από το 0.
8 | Γραμμή2 | Ο αριθμός γραμμής στην κάτω δεξιά γωνία της περιοχής κελιών· η αρίθμηση ξεκινά από το 0.
10 | Καρτέλα2 | Ο αριθμός πίνακα στην κάτω δεξιά γωνία της περιοχής κελιών· η αρίθμηση ξεκινά από το 0.
12 | Μέτρηση | Ο αριθμός των ακόλουθων στοιχείων. Τα κενά κελιά δεν καταμετρούνται ή περνούν.
14 | Στήλη | Αριθμός στήλης του στοιχείου. Η αρίθμηση ξεκινά από το 0.
16 | Γραμμή | Αριθμός σειράς του στοιχείου. Η αρίθμηση ξεκινά από το 0.
18 | Καρτέλα | Αριθμός πίνακα του στοιχείου. Η αρίθμηση ξεκινά από το 0.
20 | Σφάλμα | Αριθμός σφάλματος, όπου η τιμή 0 καθορίζεται ως "όχι σφάλμα". Αν το στοιχείο προέρχεται από ένα κελί με τύπο η τιμή σφάλματος καθορίζεται από τον τύπο.
22 | Len | Το μήκος της επόμενης συμβολοσειράς, συμπεριλαμβανομένου του μηδενικού byte τερματισμού. Εάν το μήκος, συμπεριλαμβανομένου του μηδενικού byte, ισούται με περιττή τιμή, προστίθεται ένα δεύτερο μηδενικό στη συμβολοσειρά, προκειμένου να επιτευχθεί μια άρτια τιμή. Ως εκ τούτου, το μήκος υπολογίζεται βάσει της συνάρτησης ((StrLen+2)&~1).
24 | Αλφαριθμητικό | Ακολουθία χαρακτήρων με μηδενική ψηφιολέξη κλεισίματος.
24+Len | ... | Επόμενο στοιχείο

### Πίνακες κελιών

Οι πίνακες κελιών χρησιμοποιούνται για την κλήση περιοχών κελιών, που περιέχουν τόσο κείμενο όσο και αριθμούς. Ο πίνακας κελιών ορίζεται στο LibreOffice Calc ως εξής:

Μετατόπιση | Όνομα | Περιγραφή
--- | --- | ---
0 | Στήλη1 | Ο αριθμός της στήλης στην πάνω αριστερή γωνία της περιοχής κελιών. Η αρίθμηση ξεκινά από το 0.
2 | Γραμμή1 | Ο αριθμός της γραμμής στην πάνω αριστερή γωνία της περιοχής κελιών. Η αρίθμηση ξεκινά από το 0.
4 | Καρτέλα1 | Ο αριθμός του πίνακα στην πάνω αριστερή γωνία της περιοχής κελιών. Η αρίθμηση ξεκινά από το 0.
6 | Στήλη2 | Ο αριθμός στήλης στην κάτω δεξιά γωνία της περιοχής κελιών. Η αρίθμηση ξεκινά από το 0.
8 | Γραμμή2 | Ο αριθμός γραμμής στην κάτω δεξιά γωνία της περιοχής κελιών· η αρίθμηση ξεκινά από το 0.
10 | Καρτέλα2 | Ο αριθμός πίνακα στην κάτω δεξιά γωνία της περιοχής κελιών· η αρίθμηση ξεκινά από το 0.
12 | Μέτρηση | Ο αριθμός των ακόλουθων στοιχείων. Τα κενά κελιά δεν καταμετρούνται ή περνούν.
14 | Στήλη | Αριθμός στήλης του στοιχείου. Η αρίθμηση ξεκινά από το 0.
16 | Γραμμή | Αριθμός σειράς του στοιχείου. Η αρίθμηση ξεκινά από το 0.
18 | Καρτέλα | Αριθμός πίνακα του στοιχείου. Η αρίθμηση ξεκινά από το 0.
20 | Σφάλμα | Αριθμός σφάλματος, όπου η τιμή 0 καθορίζεται ως "όχι σφάλμα". Αν το στοιχείο προέρχεται από ένα κελί με τύπο η τιμή σφάλματος καθορίζεται από τον τύπο.
22 | Τύπος | Τύπος του περιεχομένου του κελιού, 0 == Διπλής ακρίβειας, 1 == Συμβολοσειρά
24 | Τιμή ή Μήκος | Εάν ο τύπος == 0: Μεταβλητή IEEE 8 byte τύπου διπλής ακρίβειας/κινητής υποδιαστολής Εάν ο τύπος == 1: Το μήκος της επόμενης συμβολοσειράς, συμπεριλαμβανομένου του μηδενικού byte κλεισίματος. Εάν το μήκος, συμπεριλαμβανομένου του μηδενικού byte κλεισίματος, ισούται με περιττή τιμή, προστίθεται ένα δεύτερο μηδενικό στη συμβολοσειρά, προκειμένου να επιτευχθεί μια άρτια τιμή. Ως εκ τούτου, το μήκος υπολογίζεται βάσει της συνάρτησης ((StrLen+2)&~1).
26 εάν ο τύπος==1 | Αλφαριθμητικό | Εάν ο τύπος == 1: Συμβολοσειρά με μηδενικό byte κλεισίματος
32 ή 26+Len | ... | Επόμενο στοιχείο