(gelöst) Feldbefehl / Datum: Feld ermitteln

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

Moderator: Moderatoren

LokutusvB
***
Beiträge: 77
Registriert: Di, 03.11.2009 09:52

(gelöst) Feldbefehl / Datum: Feld ermitteln

Beitrag von LokutusvB »

Hallo,

ich habe in mein Dokument über Einfügen/Feldbefehl/Datum ein Datum-Feld in ein Dokument eingefügt. Dieses Feld möchte ich mit einem Makro ausfindig machen und editieren. Allerdings ist mir unklar, wie ich das Feld in einem Makro ansprechen kann. Hat dieses Feld überhaupt einen Namen bzw. wie kann ich Name oder ID ermitteln?

Viele Grüße
LvB
Zuletzt geändert von LokutusvB am Mo, 08.02.2010 17:20, insgesamt 1-mal geändert.
Benutzeravatar
komma4
********
Beiträge: 5332
Registriert: Mi, 03.05.2006 23:29
Wohnort: Chon Buri Thailand Asia
Kontaktdaten:

Re: Feldbefehl / Datum: Feld ermitteln

Beitrag von komma4 »

So ein Feld ist ein TEXTFIELD, bspw. über eine createEnumeration des Dokuments zu erreichen.

Code: Alles auswählen

oDok = ThisComponent
aTextfelder = oDok.getTextfields.CreateEnumeration
   While aTextFelder.hasmoreElements()
      CurElement = aTextFelder.NextElement
   WEnd

Wenn CurElement.isDate = TRUE dann kannst Du die
com.sun.star.util.DateTime-Struktur beeinflussen.

Problem: wenn Du mehrere Datum-Felder hast, weisst Du nie, welches Du gerade bearbeitest.

Mein Rat: setze eine Textmarke (bookmark) in Dein Dokument und fülle den Inhalt zur Laufzeit mit dem Dir genehmen Datum.

Hilft 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)
LokutusvB
***
Beiträge: 77
Registriert: Di, 03.11.2009 09:52

Re: Feldbefehl / Datum: Feld ermitteln

Beitrag von LokutusvB »

Danke, hast mir sehr geholfen. Hätte nicht gedacht, das diese Felder auch Textfelder sind. Dann hätte ich das gleich über eine Enumeration versucht. Meine Makro schaut nun so aus.

Code: Alles auswählen

Sub Document_Open()	
Dim ooDoc as Object
Dim enumTextfelder as Object
Dim aktFeld as Object
ooDoc = ThisComponent
' Datumfeld von Datum auf Datum (fix) setzen
enumTextfelder = ooDoc.getTextfields.CreateEnumeration
While enumTextFelder.hasmoreElements()
  aktFeld = enumTextFelder.NextElement
  If aktFeld.supportsService("com.sun.star.text.TextField.DateTime") Then
    If (aktFeld.IsFixed = False) Then
      aktFeld.IsFixed = True	
    End If
  End If
WEnd 	
End Sub
Allerdings habe ich nun wieder ein anderes Problem. Ich habe unter Anpassen Dokument Öffnen dieses Makro zugeordnet. Warum auch immer, es wird beim Öffnen eines Dokumentes nicht ausgeführt bzw. die mir wichtige Stelle nicht. Liegt das vielleicht daran, das vor dem Datum-Feld noch andere Textfelder sind und diese Dialoge erscheinen? Erst beim manuellen Ausführen des Makros wird es ausgeführt und das Feld ist von Datum auf Datum (fix) gesetzt.

Auf lange Sicht ist deine Lösung mit der Textmarke geplant, bin da schon daran. Kurzfristig allerdings benötige ich die Lösung der Typ-Änderung bei Dokument Öffnen.
Benutzeravatar
komma4
********
Beiträge: 5332
Registriert: Mi, 03.05.2006 23:29
Wohnort: Chon Buri Thailand Asia
Kontaktdaten:

Re: Feldbefehl / Datum: Feld ermitteln

Beitrag von komma4 »

Es wird nicht an der Reihenfolge der Felder liegen, aber am Dialog...

Warum setzt Du das Datum nicht in der Vorlage gleich auf FIX - oder bearbeitest Du ein anderes Problem?
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)
LokutusvB
***
Beiträge: 77
Registriert: Di, 03.11.2009 09:52

Re: Feldbefehl / Datum: Feld ermitteln

Beitrag von LokutusvB »

Ja, in der Tat, die Ursache liegt wo anders. Ein Delphi-Programm kopiert eine Vorlage und benennt diese um, ändert auch das Format von "ott" zu "odt". Setze ich das Datum auf Fix, wird beim Öffnen der erzeugten Kopie natürlich nicht das aktuelle Datum gesetzt. Leider geht es aus diversen Umständen nicht anders. Langfristig löse ich das über die Textmarken. Jetzt allerdings möchte ich einfach beim ersten Öffnen des neuen Dokumentes das Datum auf fix setzen lassen.

Zusatz: Das Problem, fällt mir gerade ein, könnte ich derweil lösen, indem ich beim Delphi-Programm das Format ändern lasse, da ich beim Öffnen ja sagen kann, was gemacht werden soll und was nicht. Oder aber ich setzte das Makro auf Dokument Schließen, das sollte auch gehen.
Benutzeravatar
komma4
********
Beiträge: 5332
Registriert: Mi, 03.05.2006 23:29
Wohnort: Chon Buri Thailand Asia
Kontaktdaten:

Re: Feldbefehl / Datum: Feld ermitteln

Beitrag von komma4 »

Frage: warum "kopiert" Dein Programm eine Vorlage - warum öffnet sie nicht ein neues Dokument aus der Vorlage?

Dann klappt das mit dem Datum-fix...
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)
LokutusvB
***
Beiträge: 77
Registriert: Di, 03.11.2009 09:52

Re: Feldbefehl / Datum: Feld ermitteln

Beitrag von LokutusvB »

Gute Frage, nächste Frage, die Wurzeln des Programmes stammen nicht von mir, ich habe es nur erweitert.
Die Verzweigungen des Programmes erfordern diese kopierte und umbenannte Datei in einem gewissen Ordner. Falls also bei der Abarbeitung oder wo auch immer etwas schief geht, muß zumindest die Datei noch vorhanden sein.
Benutzeravatar
komma4
********
Beiträge: 5332
Registriert: Mi, 03.05.2006 23:29
Wohnort: Chon Buri Thailand Asia
Kontaktdaten:

Re: Feldbefehl / Datum: Feld ermitteln

Beitrag von komma4 »

öffnen aus Vorlage, speichern unter gewünschtem Namen in erwarteten Ordner. Gut is 8)


Nein... ich kann kein Delphi :lol:
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)
LokutusvB
***
Beiträge: 77
Registriert: Di, 03.11.2009 09:52

Re: Feldbefehl / Datum: Feld ermitteln

Beitrag von LokutusvB »

Das sagst du so einfach, obwohl du nicht weißt was zwischen dem Kopieren und dem Öffnen des Dokumentes passiert ;). In diesem Falle allerdings lässt sich das in die Tat umsetzen. :).
Antworten