[gelöst] Writer: Rahmen mittels Makro einfügen
Moderator: Moderatoren
[gelöst] Writer: Rahmen mittels Makro einfügen
Hallo zusammen!
Ich schaffes es nicht, in Writer einen Rahmen mittels eines Makros einzufügen.
OS: MS Windows 7 (64 Bit)
OOo-Version: 3.2.1
Problem:
Wenn ich per Makrorecorder das Einfügen eines Rahmen aufzeichne, scheint alles zu funktionieren. Beim Abspielen des Makros wird aber nur ein Teil der Einstellungen des Rahmens ausgeführt.
Mein gewünschten Einstellungen sind:
Reiter „Typ“:
Größe:
Breite: 17,50 cm
Höhe: 1,50 cm
Autom. Größe: Haken ist gesetzt
Verankerung: „An der Seite“
Position:
Horizontal:
„Links“
zu: „Seitentextbereich“
Vertikal
„Unten“
zu: „Seitentextbereich“
Reiter „Umlauf“
Vorgabe: „Kein“
Abstände
Oben: 1,00 cm
Der Makrorecoder speichert aber nur folgendes ab:
sub Probe
rem ----------------------------------------------------------------------
rem define variables
dim document as object
dim dispatcher as object
rem ----------------------------------------------------------------------
rem get access to the document
document = ThisComponent.CurrentController.Frame
dispatcher = createUnoService("com.sun.star.frame.DispatchHelper")
rem ----------------------------------------------------------------------
dim args1(4) as new com.sun.star.beans.PropertyValue
args1(0).Name = "AnchorType"
args1(0).Value = 2
args1(1).Name = "Pos.X"
args1(1).Value = 0
args1(2).Name = "Pos.Y"
args1(2).Value = 0
args1(3).Name = "Size.Width"
args1(3).Value = 17500
args1(4).Name = "Size.Height"
args1(4).Value = 1499
dispatcher.executeDispatch(document, ".uno:InsertFrame", "", 0, args1())
end sub
Kann mir bitte jemand sagen, wie der vollständige Code lautet?
Gruß
Jochen
Ich schaffes es nicht, in Writer einen Rahmen mittels eines Makros einzufügen.
OS: MS Windows 7 (64 Bit)
OOo-Version: 3.2.1
Problem:
Wenn ich per Makrorecorder das Einfügen eines Rahmen aufzeichne, scheint alles zu funktionieren. Beim Abspielen des Makros wird aber nur ein Teil der Einstellungen des Rahmens ausgeführt.
Mein gewünschten Einstellungen sind:
Reiter „Typ“:
Größe:
Breite: 17,50 cm
Höhe: 1,50 cm
Autom. Größe: Haken ist gesetzt
Verankerung: „An der Seite“
Position:
Horizontal:
„Links“
zu: „Seitentextbereich“
Vertikal
„Unten“
zu: „Seitentextbereich“
Reiter „Umlauf“
Vorgabe: „Kein“
Abstände
Oben: 1,00 cm
Der Makrorecoder speichert aber nur folgendes ab:
sub Probe
rem ----------------------------------------------------------------------
rem define variables
dim document as object
dim dispatcher as object
rem ----------------------------------------------------------------------
rem get access to the document
document = ThisComponent.CurrentController.Frame
dispatcher = createUnoService("com.sun.star.frame.DispatchHelper")
rem ----------------------------------------------------------------------
dim args1(4) as new com.sun.star.beans.PropertyValue
args1(0).Name = "AnchorType"
args1(0).Value = 2
args1(1).Name = "Pos.X"
args1(1).Value = 0
args1(2).Name = "Pos.Y"
args1(2).Value = 0
args1(3).Name = "Size.Width"
args1(3).Value = 17500
args1(4).Name = "Size.Height"
args1(4).Value = 1499
dispatcher.executeDispatch(document, ".uno:InsertFrame", "", 0, args1())
end sub
Kann mir bitte jemand sagen, wie der vollständige Code lautet?
Gruß
Jochen
Zuletzt geändert von uroveits am So, 31.10.2010 19:00, insgesamt 1-mal geändert.
Re: Writer: Rahmen mittels Makro einfügen
Hallo zusammen!
Ich habe das Problem lösen können. Hier die Makro-Syntax:
Allerdings habe ich folgendes Problem noch nicht lösen können.
In den soeben erstellen Rahmen soll eine Tabelle eingefügt werden. Dazu möchte ich einen "AutoText" (Strg + F3) verwenden. Das Problem ist, dass nach der Erstellung des Rahmens sich der Fokus/Cursor im Fließtext befindet und nicht in dem Textfeld des Rahmens.
Ich kann zwar einen Text mit folgendem Code in den Rahmen einfügen:
ABER: ich schaffe es nicht, den Fokus in den Rahmen zu setzen und dann einen "AutoText" (Strg + F3) aufrufen zu lassen..
Hat da jemand einen Lösungsvorschlag?
Gruß
Jochen
Ich habe das Problem lösen können. Hier die Makro-Syntax:
Code: Alles auswählen
sub RahmenEinfuegen
Dim Doc As Object
Dim TextTables As Object
Dim Cursor As Object
Dim Frame As Object
Doc = StarDesktop.CurrentComponent
Cursor = Doc.Text.createTextCursor()
Cursor.gotoNextWord(False)
Frame = Doc.createInstance("com.sun.star.text.TextFrame")
Frame.Width = 17500
Frame.Height = 1500
Frame.AnchorType = com.sun.star.text.TextContentAnchorType.AT_PAGE
Frame.TopMargin = 0
Frame.BottomMargin = 0
Frame.LeftMargin = 0
Frame.RightMargin = 0
Frame.BorderDistance = 0
Frame.HoriOrient = com.sun.star.text.HoriOrientation.NONE
Frame.VertOrient = com.sun.star.text.VertOrientation.BOTTOM
Doc.Text.insertTextContent(Cursor, Frame, False)
end sub
In den soeben erstellen Rahmen soll eine Tabelle eingefügt werden. Dazu möchte ich einen "AutoText" (Strg + F3) verwenden. Das Problem ist, dass nach der Erstellung des Rahmens sich der Fokus/Cursor im Fließtext befindet und nicht in dem Textfeld des Rahmens.
Ich kann zwar einen Text mit folgendem Code in den Rahmen einfügen:
Code: Alles auswählen
FrameCursor = Frame.createTextCursor()
FrameCursor.charWeight = com.sun.star.awt.FontWeight.BOLD
FrameCursor.paraAdjust = com.sun.star.style.ParagraphAdjust.CENTER
FrameCursor.String = "Dies ist ein kleiner Test!"
Hat da jemand einen Lösungsvorschlag?
Gruß
Jochen
Windows 7 Professional (64 Bit)
LibreOffice 3.3.3; OOO330m19 (Build:301); tag libreoffice-3.3.3.1
Firefox 5.0
LibreOffice 3.3.3; OOO330m19 (Build:301); tag libreoffice-3.3.3.1
Firefox 5.0
Re: Writer: Rahmen mittels Makro einfügen
Hallo Jochen,
Viel Erfolg.
Jürgen
uroveits hat geschrieben:Hat da jemand einen Lösungsvorschlag?
Code: Alles auswählen
.....
Doc.Text.insertTextContent(Cursor, Frame, False)
oAutoTextContainer = CreateUnoService("com.sun.star.text.AutoTextContainer")
oGroup = oAutoTextContainer.getByName("standard")'Gruppe Standard anprechen
oEntry = oGroup.getByName("AF")'Autotextkürzel übergeben
Auto_String = oEntry.String
FrameCursor = Frame.createTextCursor()
FrameCursor.charWeight = com.sun.star.awt.FontWeight.BOLD
FrameCursor.paraAdjust = com.sun.star.style.ParagraphAdjust.CENTER
FrameCursor.String = Auto_String
Jürgen
Software hat keinen Verstand - benutze deinen eigenen...!
Win 7 SP1/ LibreOffice 3.4.2 OOO340m1 (Build:203) / Firefox 15.0.1 / Notebook ASUS K70IO 64 Bit-Betriebssytem
Win 7 SP1/ LibreOffice 3.4.2 OOO340m1 (Build:203) / Firefox 15.0.1 / Notebook ASUS K70IO 64 Bit-Betriebssytem
Re: Writer: Rahmen mittels Makro einfügen
Hallo Jürgen,
vielen Dank für Deine Hinweise.
Ich habe diese jetzt umgesetzt und es funktioniert im Prinzip. Das Problem, das jetzt noch auftritt ist folgendes:
Der Autotexteintrag besteht auf einer formatierten Tabelle. Ich habe ein Makro ("QMHinweisEinfuegen") geschrieben, mit dem diese Tabelle korrekt eingefügt wird (s. folgenden Code):
Dieser Code ist etwas länger, da ich die Leerzeile über und unter Tabelle automatisch entfernen lasse. Wahrscheinlich bekommst Du gerade einen Lachanfall wegen der umständlichen Programmierung. Aber es funktioniert.
Nun zu meinem Problem:
Mit Deinem Code-Vorschlag kann ich zwar den Autotext einfügen, aber die Formatierung wird nicht übernommnen. Aus meiner Sicht gibt es zwei Lösungsansätze, die ich aber beide bisher noch nicht umsetzen konnte. Vielleicht hast Du einen Tipp für mich:
Lösungsansatz1: Einfügen des Autotextes in dem gewünschten und im "AutoText" abgespeicherten Format
Lösungsansatz2: "FrameCursor = Frame.createTextCursor()" und "FrameCursor.String = " steuern wohl die Fokusübernahme und die AutoText-Ausführung innerhalb des "Rahmens". Gibt es eine Möglichkeit, das o.g. Makro ("QMHinweisEinfuegen") hier einzufügen bzw. ausführen zu lassen.
Gruß
Jochen
vielen Dank für Deine Hinweise.
Ich habe diese jetzt umgesetzt und es funktioniert im Prinzip. Das Problem, das jetzt noch auftritt ist folgendes:
Der Autotexteintrag besteht auf einer formatierten Tabelle. Ich habe ein Makro ("QMHinweisEinfuegen") geschrieben, mit dem diese Tabelle korrekt eingefügt wird (s. folgenden Code):
Dieser Code ist etwas länger, da ich die Leerzeile über und unter Tabelle automatisch entfernen lasse. Wahrscheinlich bekommst Du gerade einen Lachanfall wegen der umständlichen Programmierung. Aber es funktioniert.
Code: Alles auswählen
sub QMHinweisEinfuegen
document = ThisComponent.CurrentController.Frame
dispatcher = createUnoService("com.sun.star.frame.DispatchHelper")
rem ----------------------------------------------------------------------
dim args1(0) as new com.sun.star.beans.PropertyValue
args1(0).Name = "Group"
args1(0).Value = "SchiffersAutoText*1"
dispatcher.executeDispatch(document, ".uno:SetActGlossaryGroup", "", 0, args1())
rem ----------------------------------------------------------------------
dim args2(0) as new com.sun.star.beans.PropertyValue
args2(0).Name = "Group"
args2(0).Value = "SchiffersAutoText*1"
dispatcher.executeDispatch(document, ".uno:SetActGlossaryGroup", "", 0, args2())
rem ----------------------------------------------------------------------
dim args3(0) as new com.sun.star.beans.PropertyValue
args3(0).Name = "Group"
args3(0).Value = "SchiffersAutoText*1"
dispatcher.executeDispatch(document, ".uno:SetActGlossaryGroup", "", 0, args3())
rem ----------------------------------------------------------------------
dim args4(1) as new com.sun.star.beans.PropertyValue
args4(0).Name = "Group"
args4(0).Value = "SchiffersAutoText*1"
args4(1).Name = "ShortName"
args4(1).Value = "Q"
dispatcher.executeDispatch(document, ".uno:InsertGlossary", "", 0, args4())
rem ----------------------------------------------------------------------
dim args5(1) as new com.sun.star.beans.PropertyValue
args5(0).Name = "Count"
args5(0).Value = 1
args5(1).Name = "Select"
args5(1).Value = false
dispatcher.executeDispatch(document, ".uno:GoLeft", "", 0, args4())
rem ----------------------------------------------------------------------
dispatcher.executeDispatch(document, ".uno:DelToEndOfSentence", "", 0, Array())
rem ----------------------------------------------------------------------
dim args6(1) as new com.sun.star.beans.PropertyValue
args6(0).Name = "Count"
args6(0).Value = 1
args6(1).Name = "Select"
args6(1).Value = false
dispatcher.executeDispatch(document, ".uno:GoUp", "", 0, args5())
rem ----------------------------------------------------------------------
dim args7(1) as new com.sun.star.beans.PropertyValue
args7(0).Name = "Count"
args7(0).Value = 1
args7(1).Name = "Select"
args7(1).Value = false
dispatcher.executeDispatch(document, ".uno:GoUp", "", 0, args6())
rem ----------------------------------------------------------------------
dim args8(1) as new com.sun.star.beans.PropertyValue
args8(0).Name = "Count"
args8(0).Value = 1
args8(1).Name = "Select"
args8(1).Value = false
dispatcher.executeDispatch(document, ".uno:GoUp", "", 0, args7())
rem ----------------------------------------------------------------------
dim args9(1) as new com.sun.star.beans.PropertyValue
args9(0).Name = "Count"
args9(0).Value = 1
args9(1).Name = "Select"
args9(1).Value = false
dispatcher.executeDispatch(document, ".uno:GoUp", "", 0, args8())
rem ----------------------------------------------------------------------
dispatcher.executeDispatch(document, ".uno:Delete", "", 0, Array())
end sub
Mit Deinem Code-Vorschlag kann ich zwar den Autotext einfügen, aber die Formatierung wird nicht übernommnen. Aus meiner Sicht gibt es zwei Lösungsansätze, die ich aber beide bisher noch nicht umsetzen konnte. Vielleicht hast Du einen Tipp für mich:
Lösungsansatz1: Einfügen des Autotextes in dem gewünschten und im "AutoText" abgespeicherten Format
Lösungsansatz2: "FrameCursor = Frame.createTextCursor()" und "FrameCursor.String = " steuern wohl die Fokusübernahme und die AutoText-Ausführung innerhalb des "Rahmens". Gibt es eine Möglichkeit, das o.g. Makro ("QMHinweisEinfuegen") hier einzufügen bzw. ausführen zu lassen.
Gruß
Jochen
Windows 7 Professional (64 Bit)
LibreOffice 3.3.3; OOO330m19 (Build:301); tag libreoffice-3.3.3.1
Firefox 5.0
LibreOffice 3.3.3; OOO330m19 (Build:301); tag libreoffice-3.3.3.1
Firefox 5.0
Re: Writer: Rahmen mittels Makro einfügen
uroveits hat geschrieben:Gibt es eine Möglichkeit, das o.g. Makro ("QMHinweisEinfuegen") hier einzufügen bzw. ausführen zu lassen.
Code: Alles auswählen
.....
FrameCursor = Frame.createTextCursor()
QMHinweisEinfuegen 'Sub QMHinweisEinfuegen aufrufen
End Sub
Gruß
Jürgen
Software hat keinen Verstand - benutze deinen eigenen...!
Win 7 SP1/ LibreOffice 3.4.2 OOO340m1 (Build:203) / Firefox 15.0.1 / Notebook ASUS K70IO 64 Bit-Betriebssytem
Win 7 SP1/ LibreOffice 3.4.2 OOO340m1 (Build:203) / Firefox 15.0.1 / Notebook ASUS K70IO 64 Bit-Betriebssytem
Re: Writer: Rahmen mittels Makro einfügen
Hallo Jürgen,
vielen Dank für Deine schnelle Antwort.
Das Makro wird durch Deinen Vorschlag zwar aufgerufen und ausgeführt. Aber nicht in dem "Rahmen", sondern mitten im Fließtext. Das Problem ist die Fokusübernahme in den "Rahmen". Und da scheitert es momentan.
Ich habe in einem USA-Forum folgenden Code gefunden:
Aber dieser funzt bei mir nicht. Hast Du noch eine Idee?
Es folgt zur Übersicht der bisher erstellte Code:
Gruß
Jochen
vielen Dank für Deine schnelle Antwort.
Das Makro wird durch Deinen Vorschlag zwar aufgerufen und ausgeführt. Aber nicht in dem "Rahmen", sondern mitten im Fließtext. Das Problem ist die Fokusübernahme in den "Rahmen". Und da scheitert es momentan.
Ich habe in einem USA-Forum folgenden Code gefunden:
Code: Alles auswählen
vViewCursor.gotoRange(pFrame.getStart(),false)
Es folgt zur Übersicht der bisher erstellte Code:
Code: Alles auswählen
sub RahmenEinfuegen
Dim Doc As Object
Dim TextTables As Object
Dim Cursor As Object
Dim Frame As Object
Doc = StarDesktop.CurrentComponent
Cursor = Doc.Text.createTextCursor()
Cursor.gotoNextWord(False)
Frame = Doc.createInstance("com.sun.star.text.TextFrame")
Frame.Width = 17500
Frame.Height = 1500
Frame.AnchorType = com.sun.star.text.TextContentAnchorType.AT_PAGE
Frame.TopMargin = 0
Frame.BottomMargin = 0
Frame.LeftMargin = 0
Frame.RightMargin = 0
Frame.BorderDistance = 0
Frame.HoriOrient = com.sun.star.text.HoriOrientation.NONE
Frame.VertOrient = com.sun.star.text.VertOrientation.BOTTOM
Doc.Text.insertTextContent(Cursor, Frame, False)
oAutoTextContainer = CreateUnoService("com.sun.star.text.AutoTextContainer")
oGroup = oAutoTextContainer.getByName("<Bereichname>")
oEntry = oGroup.getByName("<Kürzel für Autotext>")
FrameCursor = Frame.createTextCursor()
QMHinweisEinfuegen
End sub
Gruß
Jochen
Windows 7 Professional (64 Bit)
LibreOffice 3.3.3; OOO330m19 (Build:301); tag libreoffice-3.3.3.1
Firefox 5.0
LibreOffice 3.3.3; OOO330m19 (Build:301); tag libreoffice-3.3.3.1
Firefox 5.0
Re: Writer: Rahmen mittels Makro einfügen
Hallo Jochen,
dann versuche es mal mit diesem Code:
dann versuche es mal mit diesem Code:
Code: Alles auswählen
sub RahmenEinfuegen
Dim Doc As Object
Dim TextTables As Object
Dim Cursor As Object
Dim Frame As Object
Doc = thisComponent
oFrames = Doc.getTextFrames()
if oFrames.hasByName("Rahmen_Tabelle") then
msgbox "Der Rahmen ist bereits vorhanden! " & CHR(13) & "Der Vorgang wird abgebrochen! ", 48
exit sub
end if
Cursor = Doc.Text.createTextCursor()
Cursor.gotoNextWord(False)
Frame = Doc.createInstance("com.sun.star.text.TextFrame")
Frame.setName("Rahmen_Tabelle")
Frame.Width = 17000
Frame.Height = 15000
Frame.AnchorType = com.sun.star.text.TextContentAnchorType.AT_PAGE
Frame.TopMargin = 0
Frame.BottomMargin = 0
Frame.LeftMargin = 0
Frame.RightMargin = 0
Frame.BorderDistance = 0
Frame.HoriOrient = com.sun.star.text.HoriOrientation.NONE
Frame.VertOrient = com.sun.star.text.VertOrientation.BOTTOM
Doc.Text.insertTextContent(Cursor, Frame, False)
oAutoTextContainer = CreateUnoService("com.sun.star.text.AutoTextContainer")
oGroup = oAutoTextContainer.getByName("mytexts")'Gruppe My Autotext anprechen
oEntry = oGroup.getByName("TE")'Autotextkürzel übergeben
Auto_String = oEntry.getText
FrameCursor = Frame.createTextCursor()
oEntry.applyto(FrameCursor)
oFrames = Doc.getTextFrames()
oFrame = oFrames.getByName("Rahmen_Tabelle")
oText = oFrame.getText()
oTextEnum = oText.createEnumeration()
do while oTextEnum.hasMoreElements()
oPart = oTextEnum.nextElement()
if (oPart.supportsService("com.sun.star.text.Paragraph")) then
oPart.dispose
endif
loop
end sub
Software hat keinen Verstand - benutze deinen eigenen...!
Win 7 SP1/ LibreOffice 3.4.2 OOO340m1 (Build:203) / Firefox 15.0.1 / Notebook ASUS K70IO 64 Bit-Betriebssytem
Win 7 SP1/ LibreOffice 3.4.2 OOO340m1 (Build:203) / Firefox 15.0.1 / Notebook ASUS K70IO 64 Bit-Betriebssytem
Re: Writer: Rahmen mittels Makro einfügen
Hallo Jürgen,
jetzt funktioniert das Erstellen des "Rahmens" und das Einfügen des Autotextes. Vielen Dank für Deinen Code.
Ich habe heute den ganzen Tag über dieses Probem im Netz gelesen - hauptsächlich über virtuelle und "echte" Cursor, weil ich diesbezüglich ansetzen wollte. Aber eine Lösung konnte ich nicht finden. Ich glaube, dass mann solche Probleme nur duch jahrelange Erfahrung lösen kann. Ich muss mal Deinen Code näher analysieren.
Ich habe aber noch eine weiteres (und hoffentlich letztes) Problem zu meiner Anfrage.
Das Problem ist, dass der Einfügevorgang immer nur einmal pro Dokument funktioniert, d.h. wenn ich auf Seite 1 das Makro ausführe, wird alles wie gewünscht ausgeführt. Wenn ich jedoch die Seite 2 (oder x) des gleichen Dokumentes aufrufe und das Makro ausführen lassen, wird der "Rahmen" immer auf der Seite 1 eingefügt bzw. das Einfügen wirde durch die Hinweismeldung, die Du in Deinem Code generierst, abgefangen.
Ich habe mal in einem mehrseitigen Dokument beispielsweise für die Seite 50 das Makro ausführen lassen. Es tritt das o.g. Phänomen auf. Wenn ich z.B. auf der Seite 67 das Makro aufrufe, wird auf der Seite 50 der Einfügevorgang anstoßen.
Irgendetwas im Code legt fest, dass der Einfügevorgang auf der gleichen Seite durchgeführt werden soll, auf der bereits ein "Rahmen" erstellt worden ist. Ich habe die Ursache dafür noch nicht herausgefunden.
Das Problem hat nichts mit Deinem Code im eigentlichen Sinne zu tun. Das Problem bestand schon bei meinem ursprünglichen Code, bei dem die Erstellung des "Rahmen" (ohne Einbindung des Autotextes) funktioniert hat. Ich habe mich nur zunächst auf die Einbindung des Autotexts konzentriert. Jetzt muss das Problem mit dem Einfügen auf verschiedenen Seiten gelöst werden.
Ich habe mal eine Variable für den "Rahmennahmen" gesetzt (Du hast ja einen Namen - "Rahmen_Tabelle" - festgesetzt). Aber dies hat wie zu erwarten das Problem nicht gelöst.
Darf ich Dich bitten, dazu noch einmal Stellung zu nehmen bzw. einen Lösungsvorschlag zu posten?
Gruß
Jochen
jetzt funktioniert das Erstellen des "Rahmens" und das Einfügen des Autotextes. Vielen Dank für Deinen Code.
Ich habe heute den ganzen Tag über dieses Probem im Netz gelesen - hauptsächlich über virtuelle und "echte" Cursor, weil ich diesbezüglich ansetzen wollte. Aber eine Lösung konnte ich nicht finden. Ich glaube, dass mann solche Probleme nur duch jahrelange Erfahrung lösen kann. Ich muss mal Deinen Code näher analysieren.
Ich habe aber noch eine weiteres (und hoffentlich letztes) Problem zu meiner Anfrage.
Das Problem ist, dass der Einfügevorgang immer nur einmal pro Dokument funktioniert, d.h. wenn ich auf Seite 1 das Makro ausführe, wird alles wie gewünscht ausgeführt. Wenn ich jedoch die Seite 2 (oder x) des gleichen Dokumentes aufrufe und das Makro ausführen lassen, wird der "Rahmen" immer auf der Seite 1 eingefügt bzw. das Einfügen wirde durch die Hinweismeldung, die Du in Deinem Code generierst, abgefangen.
Ich habe mal in einem mehrseitigen Dokument beispielsweise für die Seite 50 das Makro ausführen lassen. Es tritt das o.g. Phänomen auf. Wenn ich z.B. auf der Seite 67 das Makro aufrufe, wird auf der Seite 50 der Einfügevorgang anstoßen.
Irgendetwas im Code legt fest, dass der Einfügevorgang auf der gleichen Seite durchgeführt werden soll, auf der bereits ein "Rahmen" erstellt worden ist. Ich habe die Ursache dafür noch nicht herausgefunden.
Das Problem hat nichts mit Deinem Code im eigentlichen Sinne zu tun. Das Problem bestand schon bei meinem ursprünglichen Code, bei dem die Erstellung des "Rahmen" (ohne Einbindung des Autotextes) funktioniert hat. Ich habe mich nur zunächst auf die Einbindung des Autotexts konzentriert. Jetzt muss das Problem mit dem Einfügen auf verschiedenen Seiten gelöst werden.
Ich habe mal eine Variable für den "Rahmennahmen" gesetzt (Du hast ja einen Namen - "Rahmen_Tabelle" - festgesetzt). Aber dies hat wie zu erwarten das Problem nicht gelöst.
Darf ich Dich bitten, dazu noch einmal Stellung zu nehmen bzw. einen Lösungsvorschlag zu posten?
Gruß
Jochen
Windows 7 Professional (64 Bit)
LibreOffice 3.3.3; OOO330m19 (Build:301); tag libreoffice-3.3.3.1
Firefox 5.0
LibreOffice 3.3.3; OOO330m19 (Build:301); tag libreoffice-3.3.3.1
Firefox 5.0
Re: Writer: Rahmen mittels Makro einfügen
Es ist doch immer toll zu erleben wie sich die Dinge entwickeln.
Die Überschrift des Threads lautet:
Die Überschrift des Threads lautet:
Man sieht was daraus geworden ist.Rahmen mittels Makro einfügen

Folgender Code fügt auf die jeweilige Seite wo sich der Cursor gerade befindet den Rahmen und die Tabelle ein:uroveits hat geschrieben:Darf ich Dich bitten, dazu noch einmal Stellung zu nehmen bzw. einen Lösungsvorschlag zu posten?
Code: Alles auswählen
sub RahmenEinfuegen
Dim Doc As Object
Dim TextTables As Object
Dim Cursor As Object
Dim Frame As Object
Doc = thisComponent
Cursor = doc.text.createtextcursor()
myViewCursor = Doc.GetCurrentController.ViewCursor
iPage = myViewCursor.getPage
sFrameName = "Rahmen_Tabelle_" & iPage
cursor.gotoRange(myViewCursor,false)
oFrames = Doc.getTextFrames()
if oFrames.hasByName(sFrameName) then
msgbox "Der Rahmen auf Seite > " & iPage & " < ist bereits vorhanden! " & CHR(13) & "Der Vorgang wird abgebrochen! ", 48
exit sub
end if
Frame = Doc.createInstance("com.sun.star.text.TextFrame")
Frame.setName(sFrameName)
Frame.Width = 17000
Frame.Height = 15000
Frame.AnchorType = com.sun.star.text.TextContentAnchorType.AT_PAGE
Frame.TopMargin = 0
Frame.BottomMargin = 0
Frame.LeftMargin = 0
Frame.RightMargin = 0
Frame.BorderDistance = 0
Frame.HoriOrient = com.sun.star.text.HoriOrientation.NONE
Frame.VertOrient = com.sun.star.text.VertOrientation.BOTTOM
Doc.Text.insertTextContent(Cursor, Frame, False)
oAutoTextContainer = CreateUnoService("com.sun.star.text.AutoTextContainer")
oGroup = oAutoTextContainer.getByName("mytexts")'Gruppe My Autotext anprechen
oEntry = oGroup.getByName("TE")'Autotextkürzel übergeben
Auto_String = oEntry.getText
FrameCursor = Frame.createTextCursor()
oEntry.applyto(FrameCursor)
oFrames = Doc.getTextFrames()
oFrame = oFrames.getByName(sFrameName)
oText = oFrame.getText()
oTextEnum = oText.createEnumeration()
do while oTextEnum.hasMoreElements()
oPart = oTextEnum.nextElement()
if (oPart.supportsService("com.sun.star.text.Paragraph")) then
oPart.dispose
endif
loop
end sub
Software hat keinen Verstand - benutze deinen eigenen...!
Win 7 SP1/ LibreOffice 3.4.2 OOO340m1 (Build:203) / Firefox 15.0.1 / Notebook ASUS K70IO 64 Bit-Betriebssytem
Win 7 SP1/ LibreOffice 3.4.2 OOO340m1 (Build:203) / Firefox 15.0.1 / Notebook ASUS K70IO 64 Bit-Betriebssytem
Re: Writer: Rahmen mittels Makro einfügen
Hallo Jürgen,
jetzt funktioniert fast alles, so wie ich mir das vorstelle. Vielen Dank dafür.
Mit "fast" meine ich die Tatsache, dass in einem leeren Dokument alles funktioniert, aber nicht in meinen bestehenden Dokumenten. Da wird der Autotext-Inhalt an der falschen Stelle - also nicht unten -, sondern unterschiedlich in der Mitte bzw. an einer anderen Stelle auf der Seite eingefügt. Außerdem wird der Autotext (eine Tabelle; Erklärung s. weiter unten) nicht korrekt eingefügt. In einem leeren Dokument ist dies nicht der Fall.
Ich werde versuchen, herauszufinden, woran das liegt. Möglicherweise muss ich aber noch einmal nachfragen.
Ich bin jetzt Dir bzw. dem Forum fast eine Erklärung schuldig, für was ich das Makro benötige. Hier folgt sie:
Ich möchte erreichen, dass am Ende einer jeden Seite eine Tabelle steht. Diese Tabelle soll dort auch stehen bleiben, wenn der Text im Textfeld/Fließtext ergänzt wird.
Mit der der Fußzeilen-Lösung geht das nicht, da der Inhalt der Tabelle pro Seite unterschiedlich ist.
Mit der der Fußnoten-Lösung geht das auch nicht, da das Fußnoten-Zeichen im Text erstens jedesmal manuell eingegeben werden muss und zweitens bei einer Textergänzung mitwandert.
Mit dem o.g. Makro kann das Problem elegant gelöst werden. Diese Lösung hat Jürgen mit seinem Wissen und seiner Geduld ermöglicht.
Gruß
Jochen
jetzt funktioniert fast alles, so wie ich mir das vorstelle. Vielen Dank dafür.
Mit "fast" meine ich die Tatsache, dass in einem leeren Dokument alles funktioniert, aber nicht in meinen bestehenden Dokumenten. Da wird der Autotext-Inhalt an der falschen Stelle - also nicht unten -, sondern unterschiedlich in der Mitte bzw. an einer anderen Stelle auf der Seite eingefügt. Außerdem wird der Autotext (eine Tabelle; Erklärung s. weiter unten) nicht korrekt eingefügt. In einem leeren Dokument ist dies nicht der Fall.
Ich werde versuchen, herauszufinden, woran das liegt. Möglicherweise muss ich aber noch einmal nachfragen.
Ich hoffe, dass Du das nicht ironisch meinst.Es ist doch immer toll zu erleben wie sich die Dinge entwickeln.
Na ja. Ich hatte zwischendrin schon überlegt, einen neuen Thread aufzumachen. Aber das Thema wurde im weitesten Sinne nicht verfehlt. Aus einer Frage wurde fast ein kleines Projekt.Die Überschrift des Threads lautet: Rahmen mittels Makro einfügen
Ich bin jetzt Dir bzw. dem Forum fast eine Erklärung schuldig, für was ich das Makro benötige. Hier folgt sie:
Ich möchte erreichen, dass am Ende einer jeden Seite eine Tabelle steht. Diese Tabelle soll dort auch stehen bleiben, wenn der Text im Textfeld/Fließtext ergänzt wird.
Mit der der Fußzeilen-Lösung geht das nicht, da der Inhalt der Tabelle pro Seite unterschiedlich ist.
Mit der der Fußnoten-Lösung geht das auch nicht, da das Fußnoten-Zeichen im Text erstens jedesmal manuell eingegeben werden muss und zweitens bei einer Textergänzung mitwandert.
Mit dem o.g. Makro kann das Problem elegant gelöst werden. Diese Lösung hat Jürgen mit seinem Wissen und seiner Geduld ermöglicht.
Gruß
Jochen
Windows 7 Professional (64 Bit)
LibreOffice 3.3.3; OOO330m19 (Build:301); tag libreoffice-3.3.3.1
Firefox 5.0
LibreOffice 3.3.3; OOO330m19 (Build:301); tag libreoffice-3.3.3.1
Firefox 5.0
Re: [gelöst] Writer: Rahmen mittels Makro einfügen
Hallo zusammen!
Nachtrag:
Das Problem ist nun endgültig gelöst.
Der Grund, warum der Autotext-Inhalt bei meinen bestehenden Dokumenten nicht funktioniert hat, war folgender:
Im Code, den Jürgen gepostet hat, waren zwei meiner ursprünglichen Einstellungen nicht berücksichtigt gewesen. Ich habe dies zunächst nicht bemerkt.
Einstellungen von Jürgen:
Frame.Width = 17000
Frame.Height = 15000
Meine Einstellungen:
Frame.Width = 17500
Frame.Height = 1000
Jetz geht wirklich alles und ich arbeite damit erst einmal.
Gruß
Jochen
Nachtrag:
Das Problem ist nun endgültig gelöst.
Der Grund, warum der Autotext-Inhalt bei meinen bestehenden Dokumenten nicht funktioniert hat, war folgender:
Im Code, den Jürgen gepostet hat, waren zwei meiner ursprünglichen Einstellungen nicht berücksichtigt gewesen. Ich habe dies zunächst nicht bemerkt.
Einstellungen von Jürgen:
Frame.Width = 17000
Frame.Height = 15000
Meine Einstellungen:
Frame.Width = 17500
Frame.Height = 1000
Jetz geht wirklich alles und ich arbeite damit erst einmal.
Gruß
Jochen
Windows 7 Professional (64 Bit)
LibreOffice 3.3.3; OOO330m19 (Build:301); tag libreoffice-3.3.3.1
Firefox 5.0
LibreOffice 3.3.3; OOO330m19 (Build:301); tag libreoffice-3.3.3.1
Firefox 5.0