🙏 Helfen Sie jetzt mit, unser LibreOffice Forum zu erhalten! 🙏
Mit Ihrer Spende sichern Sie den Fortbestand, den Ausbau und die laufenden Kosten dieses Forums. 🌱

🍀 Jeder Beitrag zählt – vielen Dank für Ihre Unterstützung!🍀

❤️ DANKE >> << DANKE ❤️

>> Dank Ihrer Unterstützung -> Keine Werbung für alle registrierten LibreOffice-Forum User! <<
🤗 Als Dankeschön werden Sie im Forum als LO-SUPPORTER gekennzeichnet. 🤗

Document wechseln

Alles zur Programmierung im LibreOffice.
Antworten
paulderfinne
Beiträge: 71
Registriert: Mi 20. Feb 2013, 13:49

Document wechseln

Beitrag von paulderfinne » Fr 15. Mär 2013, 11:49

Hallo liebe Programmierprofis,

dazu gehöre ich eben nicht und bräuchte mal euren Rat. Wenn ich ein neues Dokument (in meinem Fall eine Calc-Tabelle) von einem anderen aus öffne, möchte ich in diese neue Document wechsel, sodass Thisdocument auf das neue Dokument zeigt.

Code: Alles auswählen

               strDatei="/home/paul/WorkDirectory/NewfileName.odt"
	       strDateiUrl=converttourl(strDatei)
	       myNewDoc = StarDesktop.loadComponentFromURL ("private:factory/scalc","_blank", 0, mArgs())	
	       myNewDoc.storeasurl(strDateiUrl,dummy())
Nun ist zwar das Document mit NewDoc ansprechaber, aber MyDoc=Thiscomponent bleibt noch beim alten Dokument.

gogo
* LO-Experte *
Beiträge: 1081
Registriert: Sa 5. Feb 2011, 19:07

Re: Document wechseln

Beitrag von gogo » Fr 15. Mär 2013, 12:57

MyDoc=Thiscomponent
würde ich andersherum versuchen:

Code: Alles auswählen

Thiscomponent=MyDoc
:D
g
2008 LucidL./MaverickM./WinXP LibreOffice 3.3.2 > 02/13 LinuxMint13/Xubuntu > 09/13 Debian Wheezy+LO3.5.4.2 > 01/15 Debian Jessie KDE+LO4.3.3.2/Mint17 openbox auf USB+LO4.2.8.2 > 03/16 ArchLin & LO5.1+ff > 02/18 Kubuntu

gogo
* LO-Experte *
Beiträge: 1081
Registriert: Sa 5. Feb 2011, 19:07

Re: Document wechseln

Beitrag von gogo » Fr 15. Mär 2013, 14:39

Achja: um zu 'beweisen' dass es sich dabei wirklich um "ThisComponent" handelt kannst Du Dein Makro mit ''option explicit' laufen lassen:

Code: Alles auswählen

REM  *****  BASIC  *****
option explicit
Sub Macro1
   dim strDatei
   dim myNewDoc
   dim strDateiUrl
   dim mArgs()
   dim dummy()
     strDatei="/home/paul/WorkDirectory/NewfileName.odt"
     strDateiUrl=converttourl(strDatei)
     myNewDoc = StarDesktop.loadComponentFromURL ("private:factory/scalc","_blank", 0, mArgs())   
     myNewDoc.storeasurl(strDateiUrl,dummy())
     ThisComponent=myNewDoc
End Sub
Wenn das Makro ohne Fehler abläuft, dann ist ThisComponent offensichtlich irgendwoanders dimensioniert worden, und Du kannst diesem Objekt dein myNewDoc zuweisen. Eigentlich ist das eine akademische Diskussion, da du ja auf das "ThisComponent" nur zu der aktuellen Laufzeit zugreifen kannst. Ob es ThisComponent oder myNewDoc heisst ist hübsch Wurst ... oder?
g
2008 LucidL./MaverickM./WinXP LibreOffice 3.3.2 > 02/13 LinuxMint13/Xubuntu > 09/13 Debian Wheezy+LO3.5.4.2 > 01/15 Debian Jessie KDE+LO4.3.3.2/Mint17 openbox auf USB+LO4.2.8.2 > 03/16 ArchLin & LO5.1+ff > 02/18 Kubuntu

paulderfinne
Beiträge: 71
Registriert: Mi 20. Feb 2013, 13:49

Re: Document wechseln

Beitrag von paulderfinne » Sa 16. Mär 2013, 07:14

Vielen Dank gogo. Ja, manchmal sind Lösungen soo einfach.

paulderfinne
Beiträge: 71
Registriert: Mi 20. Feb 2013, 13:49

Re: Document wechseln

Beitrag von paulderfinne » Sa 16. Mär 2013, 07:22

gogo hat geschrieben: Eigentlich ist das eine akademische Diskussion, da du ja auf das "ThisComponent" nur zu der aktuellen Laufzeit zugreifen kannst. Ob es ThisComponent oder myNewDoc heisst ist hübsch Wurst ... oder?
Naja, angenommen du rufst ein Unterprogramm auf, das auch von anderen Programmen aufgerufen werden kann und dieses Unterprogramm möchte eben auf Thiscomponent zugreifen, dann muss es richtig gesetzt werden.

gogo
* LO-Experte *
Beiträge: 1081
Registriert: Sa 5. Feb 2011, 19:07

Re: Document wechseln

Beitrag von gogo » Sa 16. Mär 2013, 10:37

Stimmt, wer Code gerne kopiert (dazu gehöre auch ich) kann davon profitieren, dass "Thiscomponent" eine globale Variable ist, d.h. mann muss den Text im Makro nicht ändern, allerdings ist es wesentlich sauberer (und sicherer) das gewünschte Objekt als Funktionsparameter übergeben.
g
2008 LucidL./MaverickM./WinXP LibreOffice 3.3.2 > 02/13 LinuxMint13/Xubuntu > 09/13 Debian Wheezy+LO3.5.4.2 > 01/15 Debian Jessie KDE+LO4.3.3.2/Mint17 openbox auf USB+LO4.2.8.2 > 03/16 ArchLin & LO5.1+ff > 02/18 Kubuntu

paulderfinne
Beiträge: 71
Registriert: Mi 20. Feb 2013, 13:49

Re: Document wechseln

Beitrag von paulderfinne » So 17. Mär 2013, 07:56

Das gibt mir zu denken. Stimmt, ich habe einfach Thiscomponent aus Fetzen von Dannenhöfer übernommen, ohne richtig zu verstehen, was sich dahinter verbirgt. Wann wird denn die Variable gesetzt?

Ich habe da nämlich ein sonderbares Phänomen. (Wahrscheinlich ist es aber lediglich meine Unfähigkeit).

Ich starte aus einer Calc-Anwendung ein Programm, das als erstes ein anderes Dokument öffnet, wie in meinem Erstbeitrag gezeigt, dann lese ich aus einer Datenbank Daten ein und erhalte ein Resultset. Dieses schreibe ich nun in ein Sheet des neuen Dokuments. Soweit, so gut. Nun wollte ich aber um jede Zelle eine Umrandung und habe dazu ein Unterprogramm Namens Kasten gebaut:

Code: Alles auswählen

Sub Kasten(intSpalte,intReihe As Integer)
Dim oDoc, oSheet,oCell, oBorder,oBorderline As object
	oDoc = thiscomponent
	oSheet=oDoc.currentcontroller.activesheet
	
    oBorder = oSheet.Tableborder
    oBorderline = oBorder.TopLine
    oBorderline.outerlinewidth = 10
    oBorderline.innerlinewidth = 0
    oBorderline.linedistance = 0
    oBorderline.color = &H00000000
    oCell = oSheet.getCellByPosition(intSpalte,intReihe)
   With oCell
    .topBorder = oBorderline
    .leftBorder = oBorderline
    .rightBorder = oBorderline
    .bottomBorder = oBorderline
  end with 
End Sub
Wenn ich das laufen lasse, wird etwa die Hälfte der Zellen umrandet, die fehlende Hälfte wird aber im Urspungsdokument, von dem aus ich das Programm aufrufe umrandet. Daher liegt mein Verdacht eben auf dieser vermaledeiten Thiscomponent.

Ich werde versuchen, das doc als Parameter zu übergeben.

Sub Kasten(intSpalte,intReihe As Integer, oDoc As Object)



Edit: Habe das nun so ausprobiert, und schon geht's. Danke gogo für Deine Hints. Offenbar wird diese Thiscomopnent vom System irgendwie umgesetzt. Sehr merkwürdig.


An alle, die das LibreOffice-Forum gern nutzen und unterstützen wollen:


Bitte helfen Sie uns mit 7 Euro pro Monat.
Durch Ihren Beitrag tragen Sie dazu bei, unsere laufenden Kosten für die kommenden Monate zu decken.
Unkompliziert per Kreditkarte oder PayPal.
Als ein kleines Dankeschön werden Sie im LO-Forum als SUPPORTER gekennzeichnet.



Antworten