Date: prev next · Thread: first prev next last
2017 Archives by date, by thread · List index


Hallo Wolfgnag,

dein Hauptproblem ist, dass du nicht weißt, was ThisComponent ist.

Ich füge mal das von mir leicht geänderte Makro ein und kommentiere anschließend die Zeilen, denen ich rechts eine Nummer gegeben habe. Von mir ergänzte Zeilen haben rechts von de Nummer einen Stern.

---------------------------------------------------------------------------------------------------------------------------------------------
Sub mkUsrTab() 'Schaltfläche: 'Neues Blatt'
    Dim fileProps1(0)    As New com.sun.star.beans.PropertyValue
dim oDoc as object (1) * oDoc = ThisComponent (1) * Xray oDoc (2) *
    oTplFile = ConvertToUrl("C:\....\LO_tst\" & "LO_tpl1.ods")
    If oTplFile = Empty Then Exit Sub
fileProps1(0).name = "" '"Hidden"'->close löscht Beide (3)
    fileProps1(0).Value = True
    dim template as object
template = starDesktop.loadComponentfromURL(oTplFile, "_blank", 0, fileProps1()) (4) Zuweisung ergänzt
    Xray template             (5) *
oSheets = thisComponent.getSheets() (6)
    ID        = "w1"    : idx    = 1 '(IndexPos Muster)
    vFrame    = ThisComponent.CurrentController.Frame
    cpTplTab("LO_work", idx)
    template.close(true)     (7) *
' ThisComponent.close(true) 'schliesst TPL (8)
ListFrames
End Sub    'mkUsrTab
---------------------------------------------------------------------------------------------------------------------------------------------

1. Wenn du die erste sub startest, dann ist ThisComponent das Dokument,
   in dem sich die sub befindet, also in deinem Fall LO_work1.doc (ich
   habe aus technischen Gründen die "1" hinzugefügt).
   Ich habe ThisComponent einer Variaben zugewiesen, damit diese
   weiterhin das Dokument identifiziert, selbst wenn im Verlauf
   ThisComponent etwas anderes werden sollte, was ich gar nicht
   lückenlos überprüft habe.
2. Kennst du Xray? Wenn nicht, dann musst du das unbedingt
   installieren. Das ist eine unentbehrliche Hilfe beim Programmieren,
   weil du für ein Objekt alle Attribute und Methoden auflisten kannst.
   Ich schicke dir per direkter Mail Hardcopies vom Ergebnis dieses
   Befehls oDoc.png)  und eines weiteren mit der Nummer (5), damit du
   einen Eindruck hast. In der ersten Hardcopy siehst du z.B. in der
   Zeile "Title", dass oDoc, d.h. ThisComponent tatsächlich das
   genannte Dok. ist.
   Xray gibt es auf der Seite
   http://berma.pagesperso-orange.fr/index2.html, auc in einer
   deutschen Version (übersetzt von mir).
3. Da du weiter unten in () das falsche File schließt, hast du bloß den
   Eindruck, dass Hiden nicht geht. Ich habe daher Hidden in deinem
   Fall gar nicht mehr ausprobiert, ich weiß aus eigenen Anwendungen,
   dass das funktioniert
4. Um mit dem Template arbeiten zu können, musst du es natürlich einer
   Variablen zuweisen.
5. zweite Hardcopy, Title ist "LO_tpl1.ods": Template.png
6. hier müsste auf jeden Fall template.sheets stehen, damit das
   überhaupt funktionieren kann. Aber auch dann kopiert deine zweite
   sub nur immer innerhalb des Dokuments ...work...
7. die Template-Datei muss (bzw. kann) geschlossen werden, die Datei
   ...work... muss offen bleiben, du willst ja weiterarbeiten.
   ThisComponent ist übrigens hier immer noch das gleiche, aber das mit
   oDoc ist eben hundertprozentig.
8. schließt eben gerade nicht TPL!
   Nach dieser Anweisung kannst du die weiteren Aktionen ausführen,
   oDoc ist ja nach wie vor das Dokument an dem du arbeiten willst. Die
   sub mit den Frames brauchst du dann ja wohl gar nicht.

Deine sub mit dem Dispatcher-Befehl kann, wieder wegen dem Irrtum mit ThisComponent, gar nichts aus dem Template kopieren, weil das Template der sub gar nicht bekannt ist: als Parameter wird der Name des gleichen Dokuments mitgegeben, das in der sub mit ThisComponent angesprochen wird. Und der Index, den du mitgibst, weiß ja nicht, auf welches Dok. er sich beziehen soll. Der Befehl ist wahrscheinlich gar nicht der passende. Aber um das Kopieren will ich mich auch gar nicht kümmern, ich vermeide den Dispatcher sowieso, weil er eingeschränkt ist und vieles gar nicht kann, das ist übrigens auch die allgemeine Empfehlung. Verwende lieber die UNO-Objekte und ihre Methoden, ich schicke dir die Hardcopy (Sheets.png) mit einem Ausschnitt der Methoden von oDoc.Sheets, da könnte eine davon die richtige sein.

Zum Einarbeiten in die Makro-Programmierung in LibO und AOO kann ich zwei Bücher empfehlen:

 * Thomas Krumbein, Makros in OpenOffice.org 3; beim Verlag vergriffen,
   wird aber im Internet gebraucht angeboten. Thomas Krumbein plant
   eine Neuauflage im eigenen Verlag
 * Marcelly/Godard, Programmation OpenOffice.org et LibreOffice:
   hervorragend, aber in französisch

Ich denke, du kommst jetzt erst mal weiter. Zum Kopieren eines Sheets aus einem Dok. in ein anderes werde ich dir keine Hilfe geben können, ich bin in Calc nicht so drin. Aber vielleicht stellst du diese Frage dann konkret in der user-Liste, wenn du selbst nicht weiterkommst.

Gerhard

Am 25.02.2017 um 16:17 schrieb Wolfgang Schaible:
hallo Gerhard '_macOS _Sierra 10.12.3;   LO 5.3.0.3
Wo du recht hast, hast du recht.

Habe zu früh abgeschnitten und nun dafür ein lauffähiges, auf Minimum reduziertes Muster in Beilage 'addTab.zip' gemacht. Darin enthalten sind die calc-Files 'LO_tpl.ods' und 'LO_work.ods' sowie die in 'subs4LO_work' gepackten Subs. Zum Testen in der IDE muss 'LO_work.ods' aktiv sein.
Hoffe, damit können meine Fragen beantwortet werden:
- Ausgehend von einem Calc-Benutzerfile kopiere ich eine bestimmte Seite aus dem Musterfile ('Hidden' geöffnet und geschlossen). Aktives Frame ist danach 'Meine Makros & Dialoge.wsLib'. Wie kann ich das ursprüngliche, nun erweiterte File zur Weiterbehandlung im Makro aktivieren? - Auch das versteckte Öffnen und Schliessen des Musterfile funktioniert nicht wie erwartet: So wie derzeit realisiert blitzt das Muster beim Öffner kurz auf. Nehme ich 'Hidden' statt " ", dann verschwinden bei 'close' beide Files.

mit freundlichen Grüssen
Wolfgang


Am 20.02.17 um 21:13 schrieb Gerhard Weydt:
Hallo Wolfgang,

ich kann mir nicht vorstellen, dass jemand mit deinen Angaben viel anfangen kann. Das eigentliche Makro, das das Kopieren erledigt, ist ja gar nicht beurteilbar. Wird denn darin das ergänzte File gespeichert? Wenn nicht, dann ist völlig klar, dass das Laden in openFrame den alten Stand liefert.

Gerhard

Am 16.02.2017 um 11:55 schrieb Wolfgang Schaible:
Sehr geehrte Community 'MacOS Sierra 10.12.1 ; jre-8u111 ; LO 5.3.0.3

Ausgehend von einem Calc-Benutzerfile kopiere ich eine bestimmte Seite aus dem Musterfile ('Hidden' geöffnet und geschlossen). Aktives Frame ist danach 'Meine Makros & Dialoge.wsLib'. Wie kann ich das ursprüngliche, nun erweiterte File zur Weiterbehandlung im Makro aktivieren?

Die Sub 'openFrame' liefert eine 2. Fassung des Benutzerfiles ohne die sichtbare zusätzliche Seite. Was ist falsch an der Sub?

mit freundlichen Grüssen
Wolfgang

Sub openFrame
    Dim mArgs(1) As new com.sun.star.beans.PropertyValue
    mArgs(0).Name    = "MacroExecutionMode"    : mArgs(0).Value = 4
mArgs(1).Name = "AsTemplate" : mArgs(1).Value = FALSE
'    mArgs(2).Name    = "ReadOnly"             : mArgs(2).Value = True
sUrl = ConvertToUrl("/Users/wsAdm/Documents/me/Gesundh/18_GesundhDta.ods")
'1)    vFrame    = ThisComponent.getCurrentController().getFrame
'1) mault: Eigenschaft oder Methode nicht gefunden: getCurrentController
    vFrames = StarDesktop.GetFrames()
    For i=1 To vFrames.getCount()
        vFrame = vFrames.getByIndex(i-1)
        s = s & CStr(i-1) & " : " & vFrame.Title & CHR(10)
    If vFrame.Title = "18_GesundhDta.ods" Then Exit for
    Next i
'2)    oDoc    = vFrame.LoadComponentFromUrl(sUrl,vFrame,2,mArgs())
'2) ergänztes File verschwindet, 2. Fassung des Originals am Schirm
    wait 1000 '<======= 1s Verzögerung
    oDoc    = vFrame.LoadComponentFromUrl(sUrl,"",2,mArgs())
'3) 1s bleibt das ergänzte file, wird überschrieben vom Original
End Sub








--
Liste abmelden mit E-Mail an: users+unsubscribe@de.libreoffice.org
Probleme? http://de.libreoffice.org/hilfe-kontakt/mailing-listen/abmeldung-liste/
Tipps zu Listenmails: http://wiki.documentfoundation.org/Netiquette/de
Listenarchiv: http://listarchives.libreoffice.org/de/users/
Alle E-Mails an diese Liste werden unlöschbar öffentlich archiviert

Context


Privacy Policy | Impressum (Legal Info) | Copyright information: Unless otherwise specified, all text and images on this website are licensed under the Creative Commons Attribution-Share Alike 3.0 License. This does not include the source code of LibreOffice, which is licensed under the Mozilla Public License (MPLv2). "LibreOffice" and "The Document Foundation" are registered trademarks of their corresponding registered owners or are in actual use as trademarks in one or more countries. Their respective logos and icons are also subject to international copyright laws. Use thereof is explained in our trademark policy.