Hallo Dieter,
wenn Du Dich mit der Thematik des Programmierens auseinandersetzen möchtest, kann
ich Dir folgende Seiten und Dokus zur Basic-Programmierung empfehlen.
https://www.uni-due.de/~abi070/count.ph ... eutsch.pdf
http://www.starbasicfaq.de/index.html
Libreoffice Handbücher.
Ganz unten auf der Seite befindet sich auch ein Handbuch zur Makro-Programmierung.
https://de.libreoffice.org/get-help/documentation/
Eine unverzichtbare Extension für die Code-Analyse und sonstige Inspection.
MRI Extension
MRI Online Doku
Um dies noch zu erwähnen:
Man kann zur Programmierung auch z.B. die Sprachen C++, Java, Python benutzen.
Ich bleibe hier bei der Erklärung für Code-Sprache Basic.
Dieter hat geschrieben:Immerhin habe ich es schon geschafft einen Button auf dem Blatt anzulegen!!
Den Rest schaffe ich dann auch noch ... hoffe ich.
Hast Du es geschafft?
Dieter hat geschrieben:IMHO reicht es den markierten Bereich zu übertragen.
Ist für User wie meinereiner am einfachsten.
Falls da Konfigurations-Optionen im Makro möglich sein sollten,
finden die Power-User bestimmt heraus, was sie damit anfangen können!
Lese meine Kommentare im Code, dort steht dieses:
Code: Alles auswählen
' aktuelle Selektion einlesen
oSel=oDoc.CurrentSelection
Die Variable
oSel enthält ALLES was in der aktuellen Selektion/ Markierung
enthalten ist. Daten, Formatierungen, Zelladressen usw.
Hiermit hole ich nur die Daten aus dem markierten Bereich (oSel) und
schreibe die Daten in ein Array:
Code: Alles auswählen
' Daten aus Selektion in Array schreiben
mArr=osel.getDataArray()
Ein Array ist im Prinzip eine Abbildung der Tabelle.
Es sind Zeilen (Datensätze) und Felder (Spalten) enthalten.
Schreibe in Zelle A1:A3 die Zahlen 1;2;3.
Markiere die Zellen A1:A3 und führe das Makro aus, dann sind im Array folgende Daten enthalten.
Arrayadresse 0,0 =1
Arrayadresse 1,0 =2
Arrayadresse 2,0 =3
Schreibe in Zelle A1:A3 die Zahlen 1;2;3.
Schreibe in Zelle B1:B3 die Zahlen 10;20;30.
Markiere die Zellen A1:B3 und führe das Makro aus,
dann sind im Array folgende Daten enthalten.
Arrayadresse 0,0 =1
Arrayadresse 0,1 =10
Arrayadresse 1,0 =2
Arrayadresse 1,1 =20
Arrayadresse 2,0 =3
Arrayadresse 2,1 =30
Übersetzt heißt dies:
Datensatz 1 in Spalte 1 = 1
Datensatz 1 in Spalte 2 = 10
Datensatz 2 in Spalte 1 = 2
Datensatz 2 in Spalte 2 = 20
Datensatz 3 in Spalte 1 = 3
Datensatz 3 in Spalte 2 = 30
Ist ja ganz prima das ich dies schreibe. Aber woher sollst Du
wissen wie man den Inhalt eines Arrays inspiziert
Code: Alles auswählen
' Daten aus Selektion in Array schreiben
mArr=osel.getDataArray()
' Print "Hallo Stop mich"
- Markieren eine Tabellenbereich.
- Füge nachfolgende Zeile, unterhalb von "mArr=osel.getDataArray()" in den Code ein.
Print "Hallo Stop mich"
- Direkt neben dem Fenster des Modulblattes in der IDE, siehst
Du eine graue Spalte.
- Dort klickst Du mit der Maus vor die gerade eingefügte Zeile.
Es wird Dir nun ein roter Punkt angezeigt.
Dieses ist eine Stoppmarke. Der Code wird genau hier unterbochen.
- Stelle nun den Cursor in das Wort/ den Arraynamen (mArr).
- Drücke die Taste F7.
- Jetzt siehst Du unten links im Beobachterfenster den Arraynamen.
- Starte das Makro. Im Beobachterfenster kannst Du nun auf die +
klicken, um die einzelnen Array-Felder auf ihren Inhalt zu püfen.
Voll easy, oder?
Code: Alles auswählen
rem ----------------------------------------------------------------------
dim args1(2) as new com.sun.star.beans.PropertyValue
args1(0).Name = "URL"
args1(0).Value = "file:///C:/temp/Unbenannt%202.csv"
args1(1).Name = "FilterName"
args1(1).Value = "Text - txt - csv (StarCalc)"
args1(2).Name = "FilterOptions"
args1(2).Value = "44,34,ANSI,1,,0,false,true,true,false"
Dieser Codeabschnitt enthält auch ein Array. Es wird aber nicht mit Daten
aus der Tabelle erzeugt, sondern im Code werden dem Array Daten übergeben.
Es handelt sich hierbei um zuweisbare Eigenschaften an ein Objekt.
Die Eigenschaften kann man auch als Parameter oder Argumente bezeichnen.
Im Code wird die Abkürzung für Argumente (args) verwendet.
Hiermit wird ein Array mit 3 Felder erzeugt, welches später die Daten
der Eigenschaften aufnehmen soll.
3 Felder? Ja
Die Zählung eines Arrays beginnt für gewöhnlich bei 0.
Somit 0,1,2 = 3 Felder.
Der Vorteil bei Arrays ist, man kann den gesamten Inhalt am Block an ein weiteres Objekt übergeben.
Mit dieser Anweisung kann mein den kompletten Inhalt eines Arrays zurück in die Tabelle schreiben:
Code: Alles auswählen
oSheet.getCellRangeByPosition(StartSpalte,StartZeile,EndSpalte,EndZeile).setDataArray(meinArrayName)
So kann auch „args1“ dazu verwendet werden, alle Parameter beim Schreiben einer Datei an ein Stück zu übergeben.
- Pfadangabe und Dateiname.
- Welcher Dateifilter wird verwendet.
- Spezielle Parameter für die CSV-Datei.
Ein Kommentar im Code wird durch eine REM oder ein Hochkomma vor der Zeile/ dem Text gekennzeichnet.
Habe noch kein Beispiel gefunden, mit dem man aus einer Selektion
von Daten ein CSV-File erstellen kann.
Ggf. muss hier ein kleiner Umweg gegangen werden:
- Zellen markieren und kopieren
- Ein neues Blatt anlegen
- Daten einfügen
- Das neue Blatt als CSV-File speichern
- Das neue Blatt(nicht die Datei) löschen.