Ersatz für uno:InsertContents

Programmierung unter AOO/LO (StarBasic, Python, Java, ...)

Moderator: Moderatoren

Axel Richter
****
Beiträge: 159
Registriert: So, 17.10.2010 16:54

Re: Ersatz für uno:InsertContents

Beitrag von Axel Richter »

Hallo j_gon,

1. Vergiss den Makro-Rekorder.
2. Beherrsche die englische Sprache soweit, dass Du englische Texte lesen und verstehen kannst.
3. Installiere Dir das XRAY-Tool, lerne es zu benutzen und untersuche die OO-Objekte damit.
XRAY-Tool: http://wiki.services.openoffice.org/wik ... X-Ray_tool
4. Formuliere Deine Wünsche zunächst für Dich selbst in Englisch und kombiniere diese Begriffe dann in einer Internet-Suchmaschine mit dem Begriff "openoffice macro"
Beispiel: http://www.google.de/#hl=de&q=openoffic ... 4e38bf1639
Beispiel: http://www.google.de/#hl=de&q=openoffic ... 4e38bf1639

5. Lerne aus Erfahrungen ;-)

Um beispielsweise nur die reinen Daten eines Zellbereiches woanders hin zu kopieren, reicht es, einfach das zugehörige DataArray zu kopieren:

Code: Alles auswählen

oSheet = thiscomponent.sheets(1) 'Tabelle2

oQuellRange = oSheet.getCellRangeByName("A1:C7") 'selbsterklärend

aDataArray = oQuellRange.getDataArray() 'Das Array enthält nun die Variant-Daten des Bereiches

oZielZelle = oSheet.getCellRangeByName("E10") 'Ziel der Kopieraktion

oCursor = oSheet.createCursorbyRange(oZielZelle) 'Erstelle einen Cursor auf der Zielzelle

oCursor.collapseToSize(ubound(aDataArray(0))+1, ubound(aDataArray)+1) 'Erweitere den Cursor so weit, dass er das Daten-Array aufnehmen kann

xray oCursor 'zeig Mal den Cursor. Das kommt später raus.

oCursor.setDataArray(aDataArray) 'schreibe das Daten-Array in den Cursor. Das entspricht "Bearbeiten-Inhalte einfügen" Text, Zahlen und Datum&Zeit


viele Grüße

Axel
Axel Richter
****
Beiträge: 159
Registriert: So, 17.10.2010 16:54

Re: Ersatz für uno:InsertContents

Beitrag von Axel Richter »

Hallo j_gon,
j_gon hat geschrieben:In welchem Array stehen eigentlich die ursprünglichen Zellwerte, so dass man ggf. auch Funktionen mit übertragen könnte? - Ist das einfach getArray()?
Es gibt für ScCellRangeObj:
getData ( ) AS [][]double = Array mit Zahlenwerten
getDataArray ( ) AS [][]any = Array mit den Zellinhalten (in Starbasic als Variant)
getFormulaArray ( ) AS [][]string = Array mit den Formeln als String

Und es gibt die entsprechenden set-Methods. Wobei Calc ein per setFormula() oder setFormulaArray() gesetzten String auch wieder als Zahl erkennt, wenn er einen Zahlenwert darstellt.
j_gon hat geschrieben:Das XrayTool hat bei mir einmal funktioniert, danach nicht mehr. Ich weiß noch nicht, wo es dort klemmt.
Da solltest Du aber dran bleiben, denn ohne ein solches Tool wird es schwer. Damit kann man sich, ausgehend von einem einmal gefundenen Objekt, durch dessen Properties und Methods hangeln und diese ggf. wiederum sofort untersuchen oder die entsprechende SDK-Dokumentation aufrufen.

Was passiert denn, wenn Du in einem Makro

Code: Alles auswählen

xray thiscomponent
aufrufst?

viele Grüße

Axel
DPunch
*******
Beiträge: 1112
Registriert: Mo, 02.11.2009 16:16
Wohnort: Marburg

Re: Ersatz für uno:InsertContents

Beitrag von DPunch »

Aloha
j_gon hat geschrieben:inzwischen habe ich das xray-Tool zu einer Antwort bekommen, indem ich es mit xraytool.xray aufrufe.
Da fehlt wohl irgendwo eine Pfadangabe.
Das liegt schlicht und ergreifend daran, dass die xray-Bibliothek geladen sein muss, bevor die Prozedur "xray" überhaupt bekannt ist / bekannt sein kann.

Entweder klappst Du beim Arbeiten mit Makros, wenn Du xray benötigen solltest, einmal die Bibliothek "XrayTool" auf (durch einen Klick auf das + links daneben im Objekt-Katalog der Basic-IDE), oder Du stellst Deinem Code einfach diese Zeile

Code: Alles auswählen

Globalscope.BasicLibraries.loadLibrary("XrayTool")
voran, oder Du packst oben genannte Zeile in eine eigene Prozedur, die Du dann als Ereignis bei Programmstart ausführen lässt.

Code: Alles auswählen

Sub LoadXrayOnStartup
Globalscope.BasicLibraries.loadLibrary("XrayTool")
End Sub
-> Extras -> Anpassen -> Ereignisse -> Programmstart -> Makro
Antworten