Seite 1 von 2

Textmarken in Writer-Vorlage "festnageln"

Verfasst: So, 27.06.2010 15:36
von Ich_frag'_den_Fuchs
Hallo Experten,

ich hoffe, Ihr könnt' mir bei meinem Problem helfen.

"Einleitung"

Ich möchte ein Programm verwenden, das eine Writer-Vorlage mittels Textmarken mit Daten aus einer auf MySQL basierenden Datenbank befüllt. Das Programm läuft ganz gut.

Das Problem ist, dass meine bisherige Writer-Vorlage Rahmen und Tabellen enthält, mit denen die Textinhalte "festgenagelt" werden. Damit kommt das Programm nicht klar (Exception "Schlag-mich-tot"); es kann nur an Textmarken im Textfeld der Seite einfügen. Hier gibt es ein vergleichbares Problemhttp://www.oooforum.de/viewtopic.php?f=18&t=5573. Da mir die Programmierkenntnisse fehlen, kann ich das Problem nicht ( in angemessener Zeit) lösen.

"Zum Kern"

Nun würde ich das Problem gern umgehen, indem ich die Writer-Vorlage einfach so umgestalte, dass die Textmarken auf dem Textfeld der Seite landen.
Leider verrutschen die Textmarken immer wieder; überhaupt kann man kaum erkennen, wo sich die Textmarken befinden. Kann man die nicht irgendwie "befestigen" ?

Falls mir da jemand weiterhelfen könnte, wäre ich sehr dankbar.

Gruß
Ein Ganther

Re: Textmarken in Writer-Vorlage "festnageln"

Verfasst: So, 27.06.2010 16:01
von komma4
Willkommen im Forum.

Dein "Programm" ist eine BASIC-Anwendung, richtig?

Zum Einfügen wird da jedenfalls ein CURSOR verwendet - und der muss innerhalb Rahmen und Texttabellen anders erzeugt werden, als im Fliesstext.


Ansonsten: Textmarken befinden sich da, wo sie festgelegt werden - die brauchen nicht gesondert "festgenagelt" zu werden.

Vielleicht lädst Du mal eine Beispieldatei (anonymisierte Daten!) hoch... und erzählst uns ein bisschen mehr von Deinem Programm.

Re: Textmarken in Writer-Vorlage "festnageln"

Verfasst: So, 27.06.2010 21:48
von Ich_frag'_den_Fuchs
Hallo Komma4,
Dein "Programm" ist eine BASIC-Anwendung, richtig?
ja, es handelt sich um eine StarBasic-Anwendung, nämlich um diese hier: http://www.canzeley.de/ Es ist selbstverständlich nicht "meins";). Nach der Lizenz dürfte ich zwar den Code verändern aber ich habe davon keine Ahnung und die Änderungen wären sicher etwas umfangreicher.
Zum Einfügen wird da jedenfalls ein CURSOR verwendet - und der muss innerhalb Rahmen und Texttabellen anders erzeugt werden, als im Fliesstext.
Das habe ich dann schonmal einigermaßen richtig verstanden.
Vielleicht lädst Du mal eine Beispieldatei (anonymisierte Daten!) hoch
Ich habe mal das hochgeladen, was von meiner ursprünglichen Vorlage noch über ist. Die erste Textmarke ist eine Adresse - das klappt auch. Aber die anderen sollen da unter dem Balken auftauchen; nur durch das Einfügen der ersten Textmarke verschiebt sich natürlich alles; bzw. zum Teil kann ich da auch einfach keine Textmarke setzen?

Gruß
Ganther
Vorlage Versuch.ott
(14.36 KiB) 36-mal heruntergeladen

Re: Textmarken in Writer-Vorlage "festnageln"

Verfasst: So, 27.06.2010 23:03
von Ich_frag'_den_Fuchs
Zu dem ursprünglichen Problem:
Zum Einfügen wird da jedenfalls ein CURSOR verwendet - und der muss innerhalb Rahmen und Texttabellen anders erzeugt werden, als im Fliesstext.
Da kommt hier ( beim Sternchen)

Code: Alles auswählen

Sub TextmarkeStringZuordnen

     If oDoc.getBookmarks().hasByName(sTextmarkeName) = True Then
		oTextmarke = oDoc.getBookmarks().getByName(sTextmarkeName)
		oCursor = oDoc.Text.createTextCursorByRange(oTextmarke.Anchor) <-------*
		oCursor.String = sTextmarkeString
	End If

End Sub
die besagte Fehlermeldung (Exception).

Man müsste hier sicher so etwas schreiben, wie "setze Cursor in Tabelle 'xy'( und danach in Tabelle 'xyz')"

Aber wahrscheinlich wird man noch an anderen Stellen Änderungen vornehmen müssen bzw. manche Textmarken sind im Fließtext ja auch richtig aufgehoben. Da müßte dann etwas auftauchen im Sinne von:" Wenn im Fließtext nicht gefunden, dann versuche es in der Tabelle."

..geht leider etwas über meine Fähigkeiten hinaus... :( aber vielleicht bekomme ich ja die Light-Lösung hin. ;)

Gruß
Ganther

Re: Textmarken in Writer-Vorlage "festnageln"

Verfasst: So, 27.06.2010 23:11
von turtle47
Hi Ganther,

Textmarken in Tabellen müssen anders angesprochen werden als "normale" Textmarken!

Viel Erfolg.

Jürgen

Re: Textmarken in Writer-Vorlage "festnageln"

Verfasst: Di, 29.06.2010 03:35
von Ich_frag'_den_Fuchs
turtle47 hat geschrieben:Hi Ganther,

Textmarken in Tabellen müssen anders angesprochen werden als "normale" Textmarken!

Viel Erfolg.

Jürgen
Erstmal vielen Dank dafür. Jetzt könnte es fast klappen.

Also, ich habe jetzt mal versucht, den verlinkten Code zu verbasteln:

Code: Alles auswählen

(zT auch In der "Ober-Sub" einsortiert; Ort scheint aber nicht so wichtig:
Dim TextTables As Object
Dim Table As Object)



Sub TextmarkeStringZuordnen

Dim Texttables as variant
TextTables = oDoc.getTextTables()
Zahl = TextTables.count() <--------------*
for TabellenZaehler = 1 to (Zahl - 1)
Table = TextTables(TabellenZaehler)
on error goto Fehler

     If oDoc.getBookmarks().hasByName(sTextmarkeName) = True Then
		oTextmarke = oDoc.getBookmarks().getByName(sTextmarkeName)
		oCursor = oDoc.Text.createTextCursorByRange(oTextmarke.Anchor)
		oCursor.String = sTextmarkeString
	End If
Next TabellenZaehler
   exit Sub
   Fehler:
   Msgbox  "Es wurde kein entsprechender Bookmark gefunden"
End Sub
In der Sternchenzeile kommt aber die Meldung "Basic-Laufzeitfehler Variable" nicht definiert. Soll das nicht in der nächsten Zeile erst stattfinden?

Gruß
Ganther

Re: Textmarken in Writer-Vorlage "festnageln"

Verfasst: Di, 29.06.2010 04:56
von komma4
Ich sage hier mal, Dein Dokument enthält keine Texttabellen... vielleicht "nur" Rahmen?


Untersuche Deine Objekte (oDoc, TextTables) mit X-Ray




Anmerkungen:

* prüfe in der Unterroutine ZUERST, ob die BOOKMARK vorhanden ist-wenn nicht: Exit Sub
* Dein Zähler startet mit 1. Arrays in OOo sind NULL-basiert, schleife also von 0 To TabellenZaehler-1 (es sei denn, Du möchtest die erste Texttabelle nicht bearbeiten 8)


Versuche Dich mal an Folgendem (aus meiner Krabbelkiste) - ersetze den Namen der Textmarke!:

Code: Alles auswählen

oDok = ThisComponent
' Textmarke
oBM = oDok.getBookmarks().getByName("replaceMe_BM")

print oBM.getAnchor.getText() '  

oBM.getAnchor.setString = "neuer Inhalt"

Hilft das weiter?

Re: Textmarken in Writer-Vorlage "festnageln"

Verfasst: Di, 29.06.2010 15:24
von Ich_frag'_den_Fuchs
komma4 hat geschrieben:Ich sage hier mal, Dein Dokument enthält keine Texttabellen... vielleicht "nur" Rahmen?



Okay, ich sage jetzt mal, es sind Rahmen, weil die Dinger Rahmen1 und Rahmen2 heißen. An den anderen Tipps habe ich mir erstmal die Zähne ausgebissen.
Den Code habe ich jetzt so verändert (Texttabelles durch Frames ersetzt):

Code: Alles auswählen

Dim textFrame As Object
Dim Table As Object
Sub TextmarkeStringZuordnen
Dim textFrames as variant
textFrames = oDoc.gettextFrame()
Zahl = textFrame.count()
for TabellenZaehler = 0 to Zahl-1 <-----------------* Fehler: Basic-Laufzeitfehler. Variable nicht definiert 
Table = textFrame(TabellenZaehler)
on error goto Fehler

     If oDoc.getBookmarks().hasByName(sTextmarkeName) = True Then
		oTextmarke = oDoc.getBookmarks().getByName(sTextmarkeName)
		oCursor = oDoc.Text.createTextCursorByRange(oTextmarke.Anchor)
		oCursor.String = sTextmarkeString
	End If
Next TabellenZaehler
   exit Sub
   Fehler:
   Msgbox  "Es wurde kein entsprechender Bookmark gefunden"
End Sub
Jetzt kommt an anderer Stelle (<---*) diese blöde Fehlermeldung. Muss Dim Table As Object bzw. Table = textFrame(TabellenZaehler) jetzt nicht auch irgw anders lauten?

Re: Textmarken in Writer-Vorlage "festnageln"

Verfasst: Mi, 30.06.2010 01:47
von komma4
Du schreibst den Code hier (neu) rein - kopierst ihn nicht?


Folgendes läuft bei mir ohne Fehlermeldung

Code: Alles auswählen

Sub de39680
oDoc= ThisComponent

textFrames = oDoc.gettextFrames()
Zahl = textFrames.count()
for TabellenZaehler = 0 to Zahl-1
   Table = textFrames(TabellenZaehler)
   print Table.name
next

End Sub

Re: Textmarken in Writer-Vorlage "festnageln"

Verfasst: Mi, 30.06.2010 12:46
von Ich_frag'_den_Fuchs
komma4 hat geschrieben:Du schreibst den Code hier (neu) rein - kopierst ihn nicht?
Nein, ich kopiere ihn schon aus dem "Basic-Fenster" (heißt bestimmt anders). (Den Code bastele ich in 'ner odt.-Datei und kopiere ihn dann ins "Basic-Fenster..)
Folgendes läuft bei mir ohne Fehlermeldung

Code: Alles auswählen

Sub de39680
oDoc= ThisComponent

textFrames = oDoc.gettextFrames()
Zahl = textFrames.count()
for TabellenZaehler = 0 to Zahl-1
   Table = textFrames(TabellenZaehler)
   print Table.name
next

End Sub
Wenn ich das reinkopiere, stört sich der Computer daran auch nicht.

Im folgenden "Zusammenbau" bleibt es aber bei dem besagten Fehler; wenn "textFrames = oDoc.gettextFrame()" - also nicht im Plural - dann kommt in dieser Zeile aber die Meldung ..Laufzeitfehler Eigenschaft oder Methode nicht gefunden.

Code: Alles auswählen

Dim textFrame As Object
Dim Table As Object
Sub TextmarkeStringZuordnen
Dim textFrames as variant
oDoc = ThisComponent
textFrames = oDoc.gettextFrame()
Zahl = textFrame.count()
for TabellenZaehler = 0 to Zahl-1 
Table = textFrame(TabellenZaehler)
print Table.name
on error goto Fehler

     If oDoc.getBookmarks().hasByName(sTextmarkeName) = True Then
      oTextmarke = oDoc.getBookmarks().getByName(sTextmarkeName)
      oCursor = oDoc.Text.createTextCursorByRange(oTextmarke.Anchor)
      oCursor.String = sTextmarkeString
   End If
Next TabellenZaehler
   exit Sub
   Fehler:
   Msgbox  "Es wurde kein entsprechender Bookmark gefunden"
End Sub
(Überhaupt scheint dem Ding nichts zu gefallen, was ich an dem Code ändere; ist was eingerückt: Syntaxfehler; End Sub erwartet, nicht erwartet oder ist zuviel...dieses Basic ist 'ne schlecht gelaunte Ehefrau... Dann wollte ich den verlinkten Tabellencode nehmen und eine Vorlage mit Tabellen bauen - gefällt ihm auch nicht. :( )

Re: Textmarken in Writer-Vorlage "festnageln"

Verfasst: Mi, 30.06.2010 21:21
von turtle47
Hallo Fuchsfrager,

über eins kann man ja nicht meckern. Du hast ne enorme Geduld.

Beigefügt mal eine Dokumentvorlage zum beschreiben von Textmarken innerhalb von Tabellen und Rahmen.
Du brauchst nur innerhalb der beiden Subs die entsprechenden Werte einzutragen, den Rest übernehmen die Functionen.

Vielleicht hilft Dir das weiter.

Jürgen

Re: Textmarken in Writer-Vorlage "festnageln"

Verfasst: Do, 01.07.2010 05:25
von komma4
Ich_frag'_den_Fuchs hat geschrieben:Im folgenden "Zusammenbau" bleibt es aber bei dem besagten Fehler; wenn "textFrames = oDoc.gettextFrame()" - also nicht im Plural - dann kommt in dieser Zeile aber die Meldung ..Laufzeitfehler Eigenschaft oder Methode nicht gefunden.
Das liegt bestimmt daran, dass die Methode nicht definiert ist 8)

Lese mal: API-Dokumentation


Hoffentlich kommst Du mit Jürgens Beispiel weiter!

Re: Textmarken in Writer-Vorlage "festnageln"

Verfasst: Do, 01.07.2010 10:21
von Ich_frag'_den_Fuchs
komma4 hat geschrieben:
Das liegt bestimmt daran, dass die Methode nicht definiert ist 8)
Okay, damit (+ Google) ist heute Morgen* ein dicker Groschen durch die Dachrinne gerauscht.

Ganz oben im Code steht nämlich "Option Explicit" und darunter sind einige "Variabeln" mit Private festgelegt. Nehme ich das "Open Explicit" raus, so laufen die meisten Sachen auch ( Man kann sich ja als Ahnungsloser gar nicht vorstellen, dass so etwas dazu führen soll, dass Änderungen nicht "gefressen" werden). Ich habe jetzt mal den Code von Jürgens Vorlage eingebaut.

Scheint bisher alles zu klappen; weiß jetzt nur nicht, ob das Rausnehmen oben auch negative Auswirkungen hat.

Also, erstmal vielen vielen Dank Euch beiden!!! :D


*(neue Rechtschreibung sieht wieder komisch aus)

Re: Textmarken in Writer-Vorlage "festnageln"

Verfasst: Do, 01.07.2010 10:36
von komma4
Ich_frag'_den_Fuchs hat geschrieben:Ganz oben im Code steht nämlich "Option Explicit" und darunter sind einige "Variabeln" mit Private festgelegt.
F1 Online-Hilfe Basic, Option Explicit-Anweisung[Laufzeit] hat geschrieben:Legt fest, dass jede Variable im Programmcode explizit mit der Dim-Anweisung deklariert werden muss.
[Hervorhebung durch mich]

Jede bedeutet eben: nicht nur "einige".

DIM und PRIVATE sind dabei fast gleich (s. ebenfalls in der Hilfe)



Weiterhin viel Spass mit OOo-StarBasic :)

Re: Textmarken in Writer-Vorlage "festnageln"

Verfasst: Do, 10.03.2011 09:39
von ghysmodos
Hallo,


ich habe das gleiche Problem mit der gleichen Anwendung.
Habe immer noch den Fehler

Code: Alles auswählen

textFrames = oDoc.gettextFrame()
Leider kann ich damit
Das liegt bestimmt daran, dass die Methode nicht definiert ist

Lese mal: API-Dokumentation
nichts anfangen. Könnt ihr mit weiterhelfen?


Beste Grüße

Ludwig