Περιεχόμενα
Δείκτης 🔎︎

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

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

LibreOffice Calc can be expanded by Add-Ins, which are external programming modules providing additional functions for working with spreadsheets. These are listed in the Function Wizard in the Add-In category. If you would like to program an Add-In yourself, you can learn here which functions must be exported by the shared libraryexternal DLL so that the Add-In can be successfully attached.

LibreOffice searches the Add-in folder defined in the configuration for a suitable shared libraryDLL. To be recognized by LibreOffice, the shared libraryDLL must have certain properties, as explained in the following. This information allows you to program your own Add-In for Function Wizard of LibreOffice Calc.

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

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

### Functions of Shared LibraryAddIn 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

## Shared LibraryDLL functions

Following you will find a description of those functions, which are called at the Shared Libraryexternal DLL.

For all Shared LibraryDLL functions, the following applies:

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

Output: Resulting value

Input: Any number of types (double&, char*, double*, char**, Cell area), where the Cell area is an array of types double array, string array, or cell array.

### GetFunctionCount()

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

Σύνταξη

void CALLTYPE GetFunctionCount(USHORT& nCount)

Παράμετρος

USHORT &nCount:

Output: Reference to a variable, which is supposed to contain the number of Add-In functions. For example: If the Add-In provides 5 functions for LibreOffice Calc, then nCount=5.

### GetFunctionData()

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

Σύνταξη

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

Παράμετρος

USHORT& nNo:

Input: Function number between 0 and nCount-1, inclusively.

char* pFuncName:

Output: Function name as seen by the programmer, as it is named in the Shared LibraryDLL. This name does not determine the name used in the Function Wizard.

USHORT& nParamCount:

Output: Number of parameters in AddIn function. This number must be greater than 0, because there is always a result value; the maximum value is 16.

Paramtype* peType:

Output: Pointer to an array of exactly 16 variables of type Paramtype. The first nParamCount entries are filled with the suitable type of parameter.

char* pInternalName:

Output: Function name as seen by the user, as it appears in the Function Wizard. May contain umlauts.

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

### GetParameterDescription()

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

Σύνταξη

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

Παράμετρος

USHORT& nNo:

Input: Number of the function in the library; between 0 and nCount-1.

USHORT& nParam:

Input: Indicates, for which parameter the description is provided; parameters start at 1. If nParam is 0, the description itself is supposed to be provided in pDesc; in this case, pName does not have any meaning.

char* pName:

Output: Takes up the parameter name or type, for example, the word "Number" or "String" or "Date", and so on. Implemented in LibreOffice Calc as char[256].

char* pDesc:

Output: Takes up the description of the parameter, for example, "Value, at which the universe is to be calculated." Implemented in LibreOffice Calc as char[256].

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

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

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

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

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

Offset | Name | Description
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 καθορίζεται ως εξής:

Offset | Name | Description
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 ως εξής:

Offset | Name | Description
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 | ... | Επόμενο στοιχείο