Hallo
Ich bin gerade beim "überfliegen" der pdf, und kann soweit bestätigen das es gut strukturiert erklärt ist und keine groben Fehler enthält.
Im folgenden Kommentiere ich (IHMO) kleinere Fehler:
@ 3.) Bibliotheken und Module
pdf.$3 hat geschrieben:Die OO-Basic-Strukturen kennen die Aufteilung in
Bibliotheken und Module. Python kennt nur Bibliotheken (Libraries). Der in einer Datei zusam-
mengefasste Code ist eine Library. Eine Untergliederung in Module ist nicht vorgesehen.
das ist so nicht richtig, python benutzt sehr wohl den Begriff `module` sogar semantisch analog zu Basic:
Code: Alles auswählen
>>> import zipfile
>>> zipfile
<module 'zipfile' from '/usr/lib/python3.4/zipfile.py'>
@ 3.) ...ein paar Zeilen weiter unten:
Deine Motive für den Importhook kann ich nicht so ganz nachvollziehen, warum speicherst du die "
importierbaren" Sachen nicht einfach dort wo sie
automatisch importierbar sind, nämlich in
.../pythonpath/...
@ 4.5 ...ergänzend zur Behandlung von Datum/zeit Basic versus python
Der Basic-interpreter benutzt im Prinzip das gleiche Modell zur Darstellung und Berechnung von Datum und Zeit wie Calc:
Es wird grundsätzlich
in "Fliesskomma-tagen" seit dem soffice-Basis-Datum gerechnet ( dem 30 Dezember 1899 0:00 uhr )
Python weiss von zunächst mal nichts von diesem Modell, es benutzt seine eigenen Bibliotheken die im Hintergrund im wesentlichen (wie alle Betriebssysteme auch) die "
Fliesskomma-sekunden seit ... moment..., ich frage mal nach:
Code: Alles auswählen
>>> from datetime import _EPOCH
>>> _EPOCH
datetime.datetime(1970, 1, 1, 0, 0, tzinfo=datetime.timezone.utc)
....auf deutsch dem Basisdatum 1970-01-01 0:00 UTC benutzt
um einem Datums/zeitwert aus Calc heraus in ein Python-Datum zu übersetzen, müssten wir in etwa forlgendes tun:
Code: Alles auswählen
from datetime import datetime, timedelta
# Tag Null im Calc-universum
office_zero = datetime(1899,12,30)
print(office_zero)
doc = XSCRIPTCONTEXT.getDocument()
calc_now = doc.CurrentSelection.Value
#die Ausgabe von =JETZT() aus Calc ohne Formatierung
print(calc_now)
momentan = office_zero + timedelta(days=calc_now)
print(momentan)
mit der Ausgabe
Code: Alles auswählen
1899-12-30 00:00:00
42414.75233621262
2016-02-14 18:03:21.848771
[edit:18:06]die Zeitausgabe aktualisiert auf 18:03..[/edit]
@ 5.1 (auch 5.2, 5.3 ) Ereignisse, Buttons etc.
soffice reicht grundsätzlich an alle Prozeduren, die per Button oder Ereigniss in irgendeiner Form getriggert werden, eben diesen Aufrufkontext als Argument[e] durch, der python-Interpreter unterdrückt nur nicht stillschweigend die Tatsache einer Argumentübergabe wenn in der Methodensignatur gar keine definiert wurde.
(das ist IHMO in basic zumindest unsauber implementiert )
Allgemein sollte man als Programmierer (egal ob Basic, python,...) diese durchgereichten Argumente auch in der aufgerufenen Funktion
benutzen und nicht ignorieren.
der asterisk bedeuted: die (Funktion|Methode) darf mit einer undefinierten Anzahl- ( einschliesslich null ) -von Argumenten aufgerufen werden.