Allen Tabellen im Writer Dokument eine Vorlage zuweisen

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

Moderator: Moderatoren

stemeiBE
Beiträge: 6
Registriert: Mi, 20.11.2019 12:51

Allen Tabellen im Writer Dokument eine Vorlage zuweisen

Beitrag von stemeiBE »

Hallo zusammen,

ich wollte per Makro sämtlichen Tabellen im Writer Document eine andere Absatzvorlage zuweisen (stets die selbe),
frage mich aber, ob das z.Z. überhaupt möglich ist.

Die Schleife hatte ich mir so wie in diesem Beispiel vorgestellt:

Code: Alles auswählen

Dim Doc As Object
Dim TextTables As Object
Dim Table As Object
Dim I As Integer
Doc = ThisComponent
TextTables = Doc.getTextTables()
For I = 0 to TextTables.count - 1
 
   Table = TextTables(I)
  
   ' Editing table
 
Next I

'Table' aus dem voranstehenden Beispiel wollte ich dann ungefähr so wie nachstehend verwenden:

Code: Alles auswählen


dim dispatcher as object
dim args1(1) as new com.sun.star.beans.PropertyValue

args1(0).Name = "Template"
args1(0).Value = "Tabellen Inhalt"
args1(1).Name = "Family"
args1(1).Value = 2

dispatcher = createUnoService("com.sun.star.frame.DispatchHelper")
 
 rem  -  'Table' soll dann in einer Schleife  als Argument für '.executeDispatch' verwendet werden...
  		dispatcher.executeDispatch(Table, ".uno:StyleApply", "", 0, args1())

Jedoch kann ich 'Table' hier wohl aber gar nicht so direkt wie in meinem Beispiel benutzen.
Desweitern ist mir nicht klar, ob man '.uno:StyleApply' überhaupt auf eine einzelne Tabelle anwenden kann.

Der Hintergrund ist der, daß ich mit ein großen Dokument zu tun habe (u.A. ca. 1500 Tabellen), daß mal aus einem Konverter gekommen ist,
und bei dem Sämtliche Tabellen falsche Vorlagen nebst sonstige Einstellungen haben.

Kennt sich jemand von euch vielleicht damit aus?
marcel_at_work
****
Beiträge: 195
Registriert: Sa, 24.04.2010 15:51
Wohnort: Basel [CH]

Re: Allen Tabellen im Writer Dokument eine Vorlage zuweisen

Beitrag von marcel_at_work »

Hallöchen,

ich bin noch kein Experte in Writer und mich würde brennend mal interessieren, warum in einem Textdokument überhaupt 1500 Tabellen existieren?

Liebe Grüße,

Marcel
[Win 10 Pro x64/Downgrade 7, AOO 4.1.6 und LO 6.3.0.4]
Toxitom
********
Beiträge: 3768
Registriert: Di, 12.08.2003 18:07
Wohnort: Wiesbaden
Kontaktdaten:

Re: Allen Tabellen im Writer Dokument eine Vorlage zuweisen

Beitrag von Toxitom »

Hei Stemei,

es gibt noch keine "echten" Tabellen-Vorlagen in AO/LO. Insofern kannst Du auch direkt keine zuweisen. Die bisherige Zuweisung erfolgt über definierte Muster mit internen Programmen - das kannst Du natürlich nachstellen.

Also: Die Tabelle selbst hat keinen "Style" (Formatvorlage), sondern lediglich die einzelnen Zellen. Und denen kannst Du einfach eine Absatzvorlage zuweisen bzw. die zugewiesene ändern:

Ich verwende Deinen Code und ergänze ihn:

Code: Alles auswählen

Dim Doc As Object
Dim TextTables As Object
Dim Table As Object, oZelle as variant
Dim I As Integer, j as integer
dim aZellNamen()
Doc = ThisComponent
TextTables = Doc.getTextTables()
For I = 0 to TextTables.count - 1
   Table = TextTables(I)  'liefert Dir die einzelne Tabelle als Objekt
   aZellNames = table.CellNames()   'liefert Dir die Namen der Zellen als Liste (array)
   REM jetzt über Zellen iterieren
   For j = 0 to ubound(aZellNames)
     oZelle = table.getCellbyName(aZellNames(j))   'Du erhälst das Objekt der einzelnen Zelle
     oZelle.Start.ParaStyleName = "meineVorlage"    'weist die Absatzvorlage "meine Vorlage" zu
   next j
 
Next I
Die Absatz-Vorlage muss existieren! Und mögliche Fehler habe ich im Code nicht abgefangen. Aber so kannst Du mal beginnen.

VG
Tom
Unterstützer LibreOffice, zertifizierter Trainer und Berater
Bücher: LibreOffice 6- Einstieg und Umstieg
Makros Grundlagen - LibreOffice / OpenOffice Basic
stemeiBE
Beiträge: 6
Registriert: Mi, 20.11.2019 12:51

Re: Allen Tabellen im Writer Dokument eine Vorlage zuweisen

Beitrag von stemeiBE »

@ marcel_at_work
Eine bekannte sitzt zusammen mit anderen an einer Masterarbeit (Kommunikationspsychologie) und wertet dafür u.A auch Email und Gesprächsprotokolle aus. Die sollen dann schön formatiert sein, damit man sich bei Bedarf mal ein paar Seiten ausdrucken und sie zur
not auch wem Zeigen kann.Ich habe mich selbstloser weise bereit erklärt in IT Angelegenheiten zu helfen.
Nun ja, man wird sehen, wie viel Zeit mich das noch kosten wird;-)

@Toxitom
Vielen dank lieber Toxitom! Dein Code Funktioniert soweit problemlos und ist warscheinlich auch alles was ich brauche,
aber kann es sein, daß es einige Eigenschaften des äusseren Erscheinungsbildes einer Tabelle gibt, die man so nicht ansprechen kann, so
daß man hierfür z.Z. noch zwangsläufig das GUI benutzen muss?
Zuletzt geändert von stemeiBE am Do, 21.11.2019 19:56, insgesamt 1-mal geändert.
Toxitom
********
Beiträge: 3768
Registriert: Di, 12.08.2003 18:07
Wohnort: Wiesbaden
Kontaktdaten:

Re: Allen Tabellen im Writer Dokument eine Vorlage zuweisen

Beitrag von Toxitom »

Hei,
..daß es einige Eigenschaften des äusseren Erscheinungsbildes einer Tabelle gibt, die man so nicht ansprechen kann...
Nein. Alle Eigenschaften, die Du über die GUI ansprechen könntest, kannst Du auch per Makro setzen. Eine Tabelle hat eigentlich keine eigenen Eigenschaften sondern repräsentiert die Summe der Eigenschaften der einzelnen Zellen.

Einzig die Anzahl der Zellen ( Spalten, Zeilen sowie die Gesamtbreite ) sind Eigenschaften der Tabelle - und auch nur dort zu defibieren (und so ein paar Spezialeigenschaften wie Umbruch etc). Aber auch das liesse sich alles per Makro definieren.

Suchste irgendetwas bestimmtes?

VG
Tom
Unterstützer LibreOffice, zertifizierter Trainer und Berater
Bücher: LibreOffice 6- Einstieg und Umstieg
Makros Grundlagen - LibreOffice / OpenOffice Basic
stemeiBE
Beiträge: 6
Registriert: Mi, 20.11.2019 12:51

Re: Allen Tabellen im Writer Dokument eine Vorlage zuweisen

Beitrag von stemeiBE »

Die Gesamtbreite wäre soetwas in der Art wie ich das meinte.
Sowie evtl. noch ein paar weitere Dinge, zu denen ich aber momentan leider aus dem Gedächtnis grad' nichts sagen kann,
weil mir OO beim Laden des Dokuments immer hängen bleibt. Nachdem ich dieses kleine Problem behoben habe, könnte ich aber vielleicht noch die eine oder andere Fragen benennen, deren Lösung mich interressieren würde;-) Auf jeden Fall vielen Dank soweit für deine Mühe!
Rocko
*******
Beiträge: 1164
Registriert: Do, 11.10.2012 13:19

Re: Allen Tabellen im Writer Dokument eine Vorlage zuweisen

Beitrag von Rocko »

Mein Hinweis hat zwar nichts mit der Makroprogrammierung zu tun, umso mehr aber mit der Tabellenfunktion als solcher im Writer.

viewtopic.php?f=27&t=54230&p=235524#p235523
viewtopic.php?f=27&t=54230&p=235524#p235524
Hast du schon mal einen Blick in die Writer-FAQ und in die Calc-FAQ des Forums geworfen?
Für jeden vor dem Beginn seiner Seminararbeit ein unbedingtes MUSS: http://openoffice-uni.org/
stemeiBE
Beiträge: 6
Registriert: Mi, 20.11.2019 12:51

Re: Allen Tabellen im Writer Dokument eine Vorlage zuweisen

Beitrag von stemeiBE »

@Rocko
Danke für den Hinweis.
stemeiBE
Beiträge: 6
Registriert: Mi, 20.11.2019 12:51

Re: Allen Tabellen im Writer Dokument eine Vorlage zuweisen

Beitrag von stemeiBE »

O.k. das Problem mit dem Öffnen des Dokuments ist gelöst.
Also wenn mir jetzt jemand verraten kann, wie man die Gesamtbreite sämtlicher Tabellen im
Writer Dokument in einem Durchgang per Makro justieren kann, würde ich mich freuen.
Derweil werde ich mal Rocko's FAQ studieren, sobald ich Zeit finde.
Stephan
********
Beiträge: 12369
Registriert: Mi, 30.06.2004 19:36
Wohnort: nahe Berlin

Re: Allen Tabellen im Writer Dokument eine Vorlage zuweisen

Beitrag von Stephan »

Also wenn mir jetzt jemand verraten kann, wie man die Gesamtbreite sämtlicher Tabellen im
Writer Dokument in einem Durchgang per Makro justieren kann, würde ich mich freuen.
Indem Du, wie bei der Formatzuweisung wieder über alle Tabellen interierst und nun einfach die Breite (width) einstellst:

Code: Alles auswählen

Dim Doc As Object
Dim TextTables As Object
Dim Table As Object, oZelle as variant
Dim I As Integer, j as integer
dim aZellNamen()
Doc = ThisComponent
TextTables = Doc.getTextTables()
For I = 0 to TextTables.count - 1
   Table = TextTables(I)
   Table.width = 12000 '12 cm
Next I
insofern die Breiteneinstellung von der Ausrichtung der Tabelle tangiert ist muss wenn die Tabellen nicht links, rechts oder zentriert ausgerichtet sind, eine dieser Ausrichtungen angegeben werden oder es muss bei Manuell, von links und von rechts immer auch zumindest ein passender Abstandswert einbgegeben werden.

z.b. Ausrichtung rechts (https://www.openoffice.org/api/docs/com ... ation.html) und 12 cm breit:

Code: Alles auswählen

Dim Doc As Object
Dim TextTables As Object
Dim Table As Object, oZelle as variant
Dim I As Integer, j as integer
dim aZellNamen()
Doc = ThisComponent
TextTables = Doc.getTextTables()
For I = 0 to TextTables.count - 1
   Table = TextTables(I)
   Table.width = 12000 '12 cm
   Table.HoriOrient = 1 'rechts
Next I
z.B. Ausrichtung "von links" und linker Abstand 2 cm und 10 cm breit

Code: Alles auswählen

Dim Doc As Object
Dim TextTables As Object
Dim Table As Object, oZelle as variant
Dim I As Integer, j as integer
dim aZellNamen()
Doc = ThisComponent
TextTables = Doc.getTextTables()
For I = 0 to TextTables.count - 1
   Table = TextTables(I)
   Table.width = 10000 '12 cm
   Table.HoriOrient = 7 'von links
   Table.LeftMargin = 2000
Next I

Gruß
Stephan
stemeiBE
Beiträge: 6
Registriert: Mi, 20.11.2019 12:51

Re: Allen Tabellen im Writer Dokument eine Vorlage zuweisen

Beitrag von stemeiBE »

@Stephan
Super! Vielen Dank. Irgendwie dachte ich, das sei komplizierter, aber bin eben noch nicht wirklich dazu gekommen
die Dokumentation zu lesen. Toxitom und Du habt mir viel Zeit und Mühe gespart ;-) Danke dafür!
Antworten