Ausgewählte Felder kopieren und in xml File abspeichern

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

Moderator: Moderatoren

cronus
*
Beiträge: 14
Registriert: Di, 04.08.2009 15:03

Ausgewählte Felder kopieren und in xml File abspeichern

Beitrag von cronus »

Ich möchte ein Makro schreiben um aus einem OpenOffice Calc Dokument den Inhalt der gerade selektierten Felder herauszulesen und dann automatisch in einem xml File abzuspeichern. Das Ganze stell ich mir so vor das man die gewünschten Felder markiert und dann über einen Button (der ja einfach dazu erstellt werden kann) das Makro startet.

Kann mir da jemand helfen?
Benutzeravatar
komma4
********
Beiträge: 5332
Registriert: Mi, 03.05.2006 23:29
Wohnort: Chon Buri Thailand Asia
Kontaktdaten:

Re: Ausgewählte Felder kopieren und in xml File abspeichern

Beitrag von komma4 »

Willkommen im Forum.
cronus hat geschrieben:Kann mir da jemand helfen?
Bei welcher Frage?

Wie weit kennst Du Dich mit Programmierung aus?
Cheers
Winfried
aktuell: LO 5.3.5.2 30m0(Build:2) SUSE rpm, unter Linux openSuSE Leap 42.3 x86_64/KDE5
DateTime2 Einfügen von Datum/Zeit/Zeitstempel (als OOo Extension)
cronus
*
Beiträge: 14
Registriert: Di, 04.08.2009 15:03

Re: Ausgewählte Felder kopieren und in xml File abspeichern

Beitrag von cronus »

Naja, ich kann die Selektion einlesen, das Problem ist einfach das ich keine Ahnung habe wie ich daraus ein xml file mache!
Benutzeravatar
komma4
********
Beiträge: 5332
Registriert: Mi, 03.05.2006 23:29
Wohnort: Chon Buri Thailand Asia
Kontaktdaten:

Re: Ausgewählte Felder kopieren und in xml File abspeichern

Beitrag von komma4 »

Das SDK hat XML Objekte (com.sun.star.xml.***), oder mit einfachen WRITE Anweisungen.

Sieh' Dir mal den Code vom BasicAddonBuilder an.

Viel Erfolg!
Cheers
Winfried
aktuell: LO 5.3.5.2 30m0(Build:2) SUSE rpm, unter Linux openSuSE Leap 42.3 x86_64/KDE5
DateTime2 Einfügen von Datum/Zeit/Zeitstempel (als OOo Extension)
cronus
*
Beiträge: 14
Registriert: Di, 04.08.2009 15:03

Re: Ausgewählte Felder kopieren und in xml File abspeichern

Beitrag von cronus »

komma4 hat geschrieben:Das SDK hat XML Objekte (com.sun.star.xml.***), oder mit einfachen WRITE Anweisungen.

Sieh' Dir mal den Code vom BasicAddonBuilder an.

Viel Erfolg!
Danke, beim BasicAddonBuilder blick ich überhaupt nicht durch, kenn mich einfach zu wenig aus :(

"Programmieren in Basic mit OOo-Calc" aus dem ersten Post von Stephan hab ich jetzt mehr oder weniger ganz durch und versteh das Zeug eigentlich auch. Hab darauf jetzt nochmals neu angefangen und jetzt gleich schon ein Problem mit der Selektion wenn es ein Zellbereich ist.
Ich überprüfe ob es eine einzelner Selektierte Zelle ist oder ein ganzer Bereich. Falls einzelne Zelle ist das ja kein Problem, aber sobald es ein Zellbereich versteh ich nicht wie ich am einfachsten an den Inhalt der einzelnen Zellen komme???

Ich hole mir so den ausgewählten Bereich: selektion = calcDokument.getCurrentSelection()
Aber wie ist jetzt der was ist jetzt genau in selektion drin?
Benutzeravatar
komma4
********
Beiträge: 5332
Registriert: Mi, 03.05.2006 23:29
Wohnort: Chon Buri Thailand Asia
Kontaktdaten:

Re: Ausgewählte Felder kopieren und in xml File abspeichern

Beitrag von komma4 »

cronus hat geschrieben:Aber wie ist jetzt der was ist jetzt genau in selektion drin?
Beim Blättern im BASIC Unterforum sollte Dir schon öfter der Verweis auf Xray begegnet sein. Damit kommst Du bei Deiner o.a. Frage bestimmt weiter.
Auch kennst Du Andrew Pitonyaks Makro Dokument (oder etwa nicht?)- da gibt es auch eine deutsche Übersetzung von ...



Und wenn Du den Code vom B.A.B. nicht "lesen" kannst, dann solltest Du die XML wohl mit einfachen BASIC-Befehlen erstellen - siehe dazu die OOo Online Hilfe zu Basic, Stichworte OPEN, WRITE, CLOSE.

Viel Erfolg!
Cheers
Winfried
aktuell: LO 5.3.5.2 30m0(Build:2) SUSE rpm, unter Linux openSuSE Leap 42.3 x86_64/KDE5
DateTime2 Einfügen von Datum/Zeit/Zeitstempel (als OOo Extension)
cronus
*
Beiträge: 14
Registriert: Di, 04.08.2009 15:03

Re: Ausgewählte Felder kopieren und in xml File abspeichern

Beitrag von cronus »

Ja ich kenn das Makro Dokument von Andrew Pitonyaks, ist genau das gleiche wie bei dem anderen. Es wird immer nur erklärt wie man die Position des Bereiches und solche Dinge bekommt, aber nie wie man es auslesen kann.

Mit Xray geht bei mir gar nichts. Ich installiere es und versuche ein 1 zu 1 Beispiel:

sub main
basicLibraries.loadLibrary("Xray")
if fnWhichComponent(thisComponent) = "Text" then
oCurSelection = thisComponent.getCurrentSelection()
'xray.xray oCurSelection
if oCurSelection.supportsService("com.sun.star.text.TextRanges") then
msgbox "There are " & oCurSelection.getCount() & _
" selections in the current text document."
end if
end if
end sub

und dann kommt jedesmal:

BASIC-Laufzeitfehler
Es ist eine Exception aufgetreten
Type: com.sun.star.container.NoSuchElementException
Message: .

Xray ist aber in der Bibliothek drin!
Benutzeravatar
komma4
********
Beiträge: 5332
Registriert: Mi, 03.05.2006 23:29
Wohnort: Chon Buri Thailand Asia
Kontaktdaten:

Re: Ausgewählte Felder kopieren und in xml File abspeichern

Beitrag von komma4 »

ich lade per Befehl XrayTool(nicht "Xray"), dann erfolgt der Anfruf mit

Code: Alles auswählen

xray oCurSelection
Hilft Dir das weiter?
Cheers
Winfried
aktuell: LO 5.3.5.2 30m0(Build:2) SUSE rpm, unter Linux openSuSE Leap 42.3 x86_64/KDE5
DateTime2 Einfügen von Datum/Zeit/Zeitstempel (als OOo Extension)
cronus
*
Beiträge: 14
Registriert: Di, 04.08.2009 15:03

Re: Ausgewählte Felder kopieren und in xml File abspeichern

Beitrag von cronus »

komma4 hat geschrieben:ich lade per Befehl XrayTool(nicht "Xray"), dann erfolgt der Anfruf mit

Code: Alles auswählen

xray oCurSelection
Hilft Dir das weiter?
Ne, der Fehler passiert schon ganz oben, er markiert: basicLibraries.loadLibrary("Xray")
Benutzeravatar
komma4
********
Beiträge: 5332
Registriert: Mi, 03.05.2006 23:29
Wohnort: Chon Buri Thailand Asia
Kontaktdaten:

Re: Ausgewählte Felder kopieren und in xml File abspeichern

Beitrag von komma4 »

Das liegt daran, dass es keine Bibliothek Xray gibt (zumindest nicht in meiner Version: dort heissen die LIBs XrayTool und XrayDyn)

Das sagt Dir ja auch die Meldung: eine solches Element ist nicht vorhanden
Cheers
Winfried
aktuell: LO 5.3.5.2 30m0(Build:2) SUSE rpm, unter Linux openSuSE Leap 42.3 x86_64/KDE5
DateTime2 Einfügen von Datum/Zeit/Zeitstempel (als OOo Extension)
cronus
*
Beiträge: 14
Registriert: Di, 04.08.2009 15:03

Re: Ausgewählte Felder kopieren und in xml File abspeichern

Beitrag von cronus »

Daraufhin kommt einfach der nächste Fehler bei der nächsten Zeile
BASIC runtime error.
Sub-procedure or function procedure not definied.

Naja, das ist der Grund wieso ich damit nicht weitergemacht habe. Es kann ja eigentlich nicth sein das wenn ich den Code genau kopiere, es einen Fehler nachdem anderen gibt.

Übrigens danke das du mir immer so prompt hilfst :)
preklov
***
Beiträge: 76
Registriert: Mo, 29.06.2009 09:04
Wohnort: Ruhrgebiet

Re: Ausgewählte Felder kopieren und in xml File abspeichern

Beitrag von preklov »

Hallo Cronus,

Ausgehend von Andrew Pitonyaks Codebeispiel versuche doch einfach mal:

Code: Alles auswählen

Sub TestDataArray()

  dim oDoc as object
  dim oSels as object
  dim oData() as object
  dim oRow() as object
  dim i as integer, j as integer
  
  oDoc = ThisComponent
  oSels = oDoc.getCurrentSelection()
  
  if IsNull(oSels) then
    print "Nix selektiert."
  elseif oSels.supportsService("com.sun.star.sheet.SheetCell") then
    print "Nur 1 Zelle reicht nicht."
  elseif oSels.supportsService("com.sun.star.sheet.SheetCellRanges") then
    print "Getrennte Zellbereiche will ich nicht."
  elseif oSels.supportsService("com.sun.star.sheet.SheetCellRange") then
    print "OK. Los gehts."
    oData() = oSels.getDataArray()
    for i = lbound(oData) to ubound(oData)
      oRow() = oData(i)
      for j = lbound(oRow) to ubound(oRow)
        print ("Spalte " + j + ": " + oRow(j))
      next
    next
  else
    print "Irgendwas Seltsames selektiert. Kein Bedarf."
  end if
  
End Sub
Willst Du die xml-Elemente schlicht als Textfolge erzeugen oder hast Du schon an Dom gedacht?

Schöne Grüße
Volker
Schöne Grüße
Volker
cronus
*
Beiträge: 14
Registriert: Di, 04.08.2009 15:03

Re: Ausgewählte Felder kopieren und in xml File abspeichern

Beitrag von cronus »

Vielen Dank preklov. Das kann ich sehr gut gebrauchen und meinen Code damit anpassen :)

Momentan reicht eine Textfolge, die Richtige Formatierung wäre dann der nächste Schritt, da muss ich aber zuerst auch noch schauen wie ich das genau möchte!
Benutzeravatar
komma4
********
Beiträge: 5332
Registriert: Mi, 03.05.2006 23:29
Wohnort: Chon Buri Thailand Asia
Kontaktdaten:

Re: Ausgewählte Felder kopieren und in xml File abspeichern

Beitrag von komma4 »

cronus hat geschrieben:Sub-procedure or function procedure not definied.
Das bedeutet dann wohl, dass Du die Funktion fnWhichComponent nicht bereit stellst ...

Woher hast Du den Code? Die Funktion ist nämlich nicht im Lieferumfang einer Standard-OOo Installation.



@Volker: bzgl. DOM - siehe Posting von gestern, 14:47h. Für einen Anfänger keine einfache Sache ... XML-LESE-Beispiele gibt es einige, ich fand bislang (zugegeben: keine ausführliche Suche) keine schreibenden Beispiele.
Cheers
Winfried
aktuell: LO 5.3.5.2 30m0(Build:2) SUSE rpm, unter Linux openSuSE Leap 42.3 x86_64/KDE5
DateTime2 Einfügen von Datum/Zeit/Zeitstempel (als OOo Extension)
preklov
***
Beiträge: 76
Registriert: Mo, 29.06.2009 09:04
Wohnort: Ruhrgebiet

Re: Ausgewählte Felder kopieren und in xml File abspeichern

Beitrag von preklov »

Hallo Winfried,
XML-LESE-Beispiele gibt es einige, ich fand bislang (zugegeben: keine ausführliche Suche) keine schreibenden Beispiele.
Schade, ich nämlich auch nicht. Ich wollte mich aber schon lange mal mit Java beschäftigen. Wäre doch ein Anlass, denn dort gibt es die TransformerFactory.

Aber Du hast Recht. Das hilft dem OP nicht.

Schöne Grüße
Volker
Schöne Grüße
Volker
Antworten