Einfügen von Variablen-Inhalt an Textmarken

Das Textverarbeitungsprogramm

Moderator: Moderatoren

Tigerlillie
**
Beiträge: 25
Registriert: Di, 15.07.2003 14:31
Wohnort: Einbeck & Frankfurt (Main)
Kontaktdaten:

Einfügen von Variablen-Inhalt an Textmarken

Beitrag von Tigerlillie »

Guten Morgen,

eine Sache fehlt mir noch in meinem Makro neben den verschwindenen Einträge, das Einfügen der Variablen-Inhalte in das Dokument an den entsprechenden Textmarken.
Da weiß ich nun komplett nicht weiter...

Viele Grüße
Lillie :D
ykcim
*****
Beiträge: 324
Registriert: Di, 29.07.2003 15:22
Wohnort: Neu-Isenburg
Kontaktdaten:

Beitrag von ykcim »

Hi,

versuchs aml damit:

Code: Alles auswählen

oDoc = thisdocument
Dim oBookmark As Object
oBookmark = oDoc.Bookmarks.getByName("Textmarke" )
oBookmarkAnchor = oBookmark.Anchor
oRangeCursor = oDoc.Text.createTextCursorByRange( oBookmarkAnchor )
oRangeCursor.String = stext
Michael
__
FAQ zu Starbasic -> http://www.starbasicfaq.de
Tigerlillie
**
Beiträge: 25
Registriert: Di, 15.07.2003 14:31
Wohnort: Einbeck & Frankfurt (Main)
Kontaktdaten:

Probier es sofort aus!

Beitrag von Tigerlillie »

Hallo,

danke schön, ich probier es sofort aus. :D

Viele Grüße
Lillie
Tigerlillie
**
Beiträge: 25
Registriert: Di, 15.07.2003 14:31
Wohnort: Einbeck & Frankfurt (Main)
Kontaktdaten:

Geht nicht :(

Beitrag von Tigerlillie »

Hallo,

das funktioniert leider nicht. :( Was könnte mein Fehler sein?

Viele Grüße
Lillie
ykcim
*****
Beiträge: 324
Registriert: Di, 29.07.2003 15:22
Wohnort: Neu-Isenburg
Kontaktdaten:

Beitrag von ykcim »

Versuchs mal mit der Kurzfassung.

Code: Alles auswählen

oDoc.getBookmarks().getByName("Textmarke").getAnchor.setString(
"Text")
Der erste Code von mir geht in meiner Anwendung. Und ansonsten läuft er komischerweise nicht.. :cry:

Michael
__
FAQ zu Starbasic -> http://www.starbasicfaq.de
Tigerlillie
**
Beiträge: 25
Registriert: Di, 15.07.2003 14:31
Wohnort: Einbeck & Frankfurt (Main)
Kontaktdaten:

Geht auch nicht :(

Beitrag von Tigerlillie »

Das geht auch nicht...Ich habe da bestimmt irgendwas falsch gemacht, den ich aber nicht sehe...

oDoc = ThisDocument
oBookmark = oDoc.Bookmarks.getByName("Auskunft")
oBookmarkAnchor = oBookmark.Anchor
oRangeCursor = oDoc.Text.CreateTextCursorByRange (oBookmarkAnchor)
oRangeCursor.String = sAnrede1


oDoc, oBookmark, oBookmarkAnchor und oRangeCursor habe ich Global und als Objekte...

Könnte da irgendein Fehler sein?

Viele Grüße
Lillie
ykcim
*****
Beiträge: 324
Registriert: Di, 29.07.2003 15:22
Wohnort: Neu-Isenburg
Kontaktdaten:

Beitrag von ykcim »

Hi,

ich habe es eben noch mal geprüft:

Bei mir geht:

Code: Alles auswählen

 odoc=thiscomponent 
 oDoc.getBookmarks().getByName("test").getAnchor.setString("What you want to insert")
Bei mir geht:

Code: Alles auswählen

sub test
 dateneintragen("Meintext", "Textmarke")
end Sub

Sub DatenEintragen( stext, sBookMark as String)
   oDoc = ThisComponent
   On Error Goto Errorhandler
   oRangeCursor = JumpToBookmark( oDoc,sBookMark )
   oRangeCursor.String = stext
   Exit Sub
   Errorhandler:
End Sub

Function JumpToBookmark( oDoc As Object, sBookmarkName As String ) As Object
' Jump to the Bookmark and get the Cursor from the selection
	Dim oBookmark As Object
	oBookmark = oDoc.Bookmarks.getByName(sBookmarkName)
	oBookmarkAnchor = oBookmark.Anchor
	oRangeCursor = oDoc.Text.createTextCursorByRange( oBookmarkAnchor )
	JumpToBookmark = oRangeCursor
End Function
Du musst darauf achten das bei der Textmarke Gross- und Kleinschreibung berücksichtigt wird.

Und der Verweis für odoc sollte odoc=thiscomponent sein. Sorry.
Michael
__
FAQ zu Starbasic -> http://www.starbasicfaq.de
openmind
****
Beiträge: 184
Registriert: So, 29.06.2003 15:00
Wohnort: Schweiz

Beitrag von openmind »

Hallo,

ich kann Euch leider bei Eurem Problem mit den Bookmarks nicht helfen. Ich habe aber mal etwas ähnliches mit Feldbefehlen gemacht. Das ging eigentlich ganz einfach und flott.

1. wirter-Dokument öffnen oder neues erstellen
2. Dort wo Du einen Text einsetzen will erstellst Du Feldbefehle
  • a) Menu: Einfügen - Feldbefehl - Andere...
    b) Register "Variablen" auswählen
3. Für jeden Ort wo Text über ein Macro eingesetzt werden soll:
  • a) Feldtyp: Variable setzen
    b) Format: Text
    c) Name: wähle einen Namen für jedes Feld (im Beispiel-Script
    Vorname, Name, Strasse )
    d) Wert: Wähle einen Dummy-Wert, damit das Feld im Dokument
    sichbar ist
Das Resultat ist ein Writer-Dokument mit n Feldbefehlen des Typs Text-Variable, welche im Dokument mit grauem Hintergrund angezeigt werden. Jedem Feldbefehl wurde ein Name gegeben, damit wir ihn über OOoBasic wiedererkenne können.

Nun folgt ein Stück BasicCode. Er iteriert ganz einfach über alle Feldbefehle im Dokument und fügt der Variable mit dem Namen xyz den Wert qrs zu. Am Ende werden die Feldbefehle refresht, damit die das WriterDokument die Änderungen auch aktualisiert un anzeigt.


Code: Alles auswählen

Sub Main
	
	Dim oDoc as Object
	Dim textFieldEnumeration as Object
	Dim currentField as Object 
	
	oDoc = thisComponent
	textFieldEnumeration = oDoc.getTextFields().createEnumeration()
	
	' loop durch alle Felder
	While textFieldEnumeration.hasMoreElements() 

		currentField = textFieldEnumeration.nextElement()
		
		' test nach dem Variablenname des Feldes
		If currentField.VariableName = "Name" then

			currentField.Content = "Ein Name über OOBasic gesetzt"
		Elseif currentField.VariableName = "Vorname" then

			currentField.Content = "Ein Vorname über OOBasic"
		Elseif currentField.VariableName = "Strasse" then

			currentField.Content = "Eine Strasse über OOBasic"
		Else

			currentField.Content = "Unbekanntes Feld"
		End If
	Wend
	
	'  wichtig !! Refresh damit die Änderungen 
	'  im Dokument angezeigt werden
	oDoc.getTextFields().refresh()	
	
End Sub
have fun...
Meine Installation: AMD Athlon XP 1600+, 512 MB RAM, SuSE Linux 8.2, OpenOffice 1.1
Kostenlose OOo-CD in der Schweiz: http://www.office-cd.ch/
Tigerlillie
**
Beiträge: 25
Registriert: Di, 15.07.2003 14:31
Wohnort: Einbeck & Frankfurt (Main)
Kontaktdaten:

Irgendwas stimmt bei mir nicht...

Beitrag von Tigerlillie »

Hallo,

irgendwie ist das merkwürdig, bei mir scheint was nicht zu stimmen, weil es gibt mehrere Sachen, bei denen mein Makro zurückspringt.

Zum Beispiel kennt er bei oDoc = ThisComponent nur, wenn es oDoc = ThisDocument heißt und weiter geht es mit While TextFieldEnumeration.hasMoreElements(), mag er nicht.

Woran kann das liegen? Weil wenn das gelöst ist, würden beide Möglichkeiten funktionieren...

Viele Grüße
Lillie :D
Tigerlillie
**
Beiträge: 25
Registriert: Di, 15.07.2003 14:31
Wohnort: Einbeck & Frankfurt (Main)
Kontaktdaten:

in einem neuen Dokument geht es...

Beitrag von Tigerlillie »

das verstehe ich echt nicht, in einem neuen Dokument geht es und in meinem, in dem das drin stehen soll, hakt es jetzt ab:

If currentField.VariableName = "Name" then

aber warum?
openmind
****
Beiträge: 184
Registriert: So, 29.06.2003 15:00
Wohnort: Schweiz

Beitrag von openmind »

Manchmal gibt es Schwierigkeiten, welche von Dingen abhängen, die nichts mit dem Code zu tun haben:

1. Copy und Paste aus einer Website in die BasicIDE klappt bei mir nicht immer sehr gut. Manchmal hab ich dabei Stress wegen zusätzlichen oder Fehlenden Zeilenumbrüchen die durch C&P (Linux, OOo xyz) entstehen. Massnahme: :cry: ?? Abtippen ??

2. Ich bilde mir ein, dass es manchmal nötig ist ein Script aus dem Document heraus auszurufen und nicht aus der IDE. Massnahme: Man kann man zu Testzwecken einen Button machen, der im Document ist und mit dem BasicCode verknüpft wird. Ene andere Variante is jedesmal Extras - Macros - Macros und dann das Macros auswählen und ausführen drücken. Kann sein, dass das paranoid ist aber bei einigen Beispielen hatte ich das Gefühl das hilft.


Zum konkreten Beispiel mit den Feldbefehlen:
hakt es jetzt ab:
If currentField.VariableName = "Name" then
Möglicherweise enthält das Dokument TextFields, die keinen VariableNamen haben (Variablenfeld, Format Text, Name und Wert gesetzt?). Hmmm.. Man müsste im COde testen, ob das currentField das Interface unterstützt, welches wir benötigen. Ich werde Dir den entsprechenden Code nachreichen. Inzwischen hab ich Dir was informatives:

(code nicht von mir ... )

Code: Alles auswählen

Sub Main 
	DisplayMethods( thisComponent, "" )
	DisplayMethods( thisComponent, "props" )
	DisplayMethods( thisComponent, "interfaces" )
End Sub


Sub DisplayMethods(oObj As Object, SWhat As String)
	DIM sMethodList As String, sMsgBox As String
	DIM fs, ep As Integer
	DIM i As Integer
	DIM EOL As Boolean

	if sWhat = "" then
		sMethodList = oObj.DBG_methods
	elseif sWhat = "props" then
		sMethodList = oObj.DBG_Properties
	else
		sMethodList = oObj.DBG_SupportedInterfaces
	endif
	fs = 1
	EOL = FALSE

	While fs <= Len(sMethodList)
		sMsgBox = ""
		For i = 0 to 15
			ep = InStr(fs, sMethodList, ";")
			if ep = 0 then
				ep = Len(sMethodList)
			endif
			sMsgBox = sMsgBox & Mid$(sMethodList, fs, ep - fs) & Chr$(13)
			fs = ep + 1
		Next i
		MsgBox sMsgBox
	Wend
End Sub

Die Methode DisplayMethods zeigt dir die Methoden, Properties und Interfaces an, welche ein Object besitzt. Das Beispiel in der Main-Routine zeigt die Methoden, Properties und Interfaces an, welche für das Object thisComponent vorhanden sind. Ultrapraktisch, um mehr über ein Objekt (TextField?) herauszufinden.
Meine Installation: AMD Athlon XP 1600+, 512 MB RAM, SuSE Linux 8.2, OpenOffice 1.1
Kostenlose OOo-CD in der Schweiz: http://www.office-cd.ch/
openmind
****
Beiträge: 184
Registriert: So, 29.06.2003 15:00
Wohnort: Schweiz

Beitrag von openmind »

Ich hab das Beispiel von ykcim ausprobiert. Ich hatte genau das Problem, dass ich in Punkt 1 meines letzten Post beschrieben habe. Copy und Paste (KDE 3.1.1, Konqueror, OOo1.1rc2) aus dem Forum kopiert jene Leerzeichen, die OOo anscheinend nicht mag.

Nachdem ich bei jeder Zeile die Leerzeichen vorne und hinten entfernt habe (am besten auch die Zeilenumbrüche löschen und neu eingeben), gabs keine Probleme mehr. Hübsche Lösung, vor allem die Kurzversion ist edel:

Code: Alles auswählen

thisComponent.getBookmarks().getByName("test").getAnchor.setString("What you want to insert")
Meine Installation: AMD Athlon XP 1600+, 512 MB RAM, SuSE Linux 8.2, OpenOffice 1.1
Kostenlose OOo-CD in der Schweiz: http://www.office-cd.ch/
Tigerlillie
**
Beiträge: 25
Registriert: Di, 15.07.2003 14:31
Wohnort: Einbeck & Frankfurt (Main)
Kontaktdaten:

das ist was..

Beitrag von Tigerlillie »

wie mache ich das mit dem Button?

Danke im Übrigen :wink: das hat noch ein Problem von mir gelöst, das später aufgetreten wäre...
Tigerlillie
**
Beiträge: 25
Registriert: Di, 15.07.2003 14:31
Wohnort: Einbeck & Frankfurt (Main)
Kontaktdaten:

Beitrag von Tigerlillie »

Hallo,

gerade habe ich den Code abgetippt und das geht nicht, der hakt einfach bei:

If CurrentField.VariableName = "Name" then

In einem neuen Dokument klappt das, klappen beide Lösungen.
Ich hab da alles kontrolliert, ob da ein Tippfehler drin ist oder so: Ist nicht.
Aus dem Dokument aufrufen klappt auch nicht, also die Stelle. ;)

Der Rest geht, also oDoc = ThisComponent (mir scheint, als ob ihm das gleich wäre, groß oder klein).

Viele Grüße und einen schönen Vormittag
Lillie


PS.: Bin ab heute Mittag im Urlaub, deswegen kann sein, dass ab da nichts mehr von mir kommt. Vielleicht nehme ich mir das auch mit an den Strand. :D
Tigerlillie
**
Beiträge: 25
Registriert: Di, 15.07.2003 14:31
Wohnort: Einbeck & Frankfurt (Main)
Kontaktdaten:

Klappt auch mit den Feldern nicht

Beitrag von Tigerlillie »

Hallo,

das mit den Feldern ist für mich die einfachste Lösung, aber leider funktioniert das auch nicht. Woran kann das liegen?

VieleGrüße
Lillie
Antworten