Seite 1 von 1

Document wechseln

Verfasst: Fr 15. Mär 2013, 11:49
von paulderfinne
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.

Re: Document wechseln

Verfasst: Fr 15. Mär 2013, 12:57
von gogo
MyDoc=Thiscomponent
würde ich andersherum versuchen:

Code: Alles auswählen

Thiscomponent=MyDoc
:D

Re: Document wechseln

Verfasst: Fr 15. Mär 2013, 14:39
von gogo
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?

Re: Document wechseln

Verfasst: Sa 16. Mär 2013, 07:14
von paulderfinne
Vielen Dank gogo. Ja, manchmal sind Lösungen soo einfach.

Re: Document wechseln

Verfasst: Sa 16. Mär 2013, 07:22
von paulderfinne
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.

Re: Document wechseln

Verfasst: Sa 16. Mär 2013, 10:37
von gogo
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.

Re: Document wechseln

Verfasst: So 17. Mär 2013, 07:56
von paulderfinne
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.