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 Problem
http://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
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
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
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

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!!!
*(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
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