Re: [de-users] Writer - Tabelle mittels Makro ansprechen
Am 13.09.2011 19:54, schrieb Jochen: Hallo Peter, ich hoffe, dass ich Dich nicht allzu nerve. keineswegs Am 13.09.2011 15:34, schrieb Peter Eberlein: getByIndex(0) spricht die erste, getByIndex(1) die zweite an usw. Mein Ziel ist es, dass ich in eine beliebige Tabelle klicke und dass das Makro die Spalteneinstellung für diese Tabelle ausführt. Der Weg über den Tabellennamen oder die Tabellenziffer ermöglicht dies nicht. Gibt es da eine Lösungsmöglichkeit. Da jede Tabelle eine unterschiedliche Anzahl von Spalten beheimaten kann, macht es nur Sinn, wenn Du sicherstellen kannst, dass die Tabellen gleich aufgebaut sind. Du kannst dann mit einer For-Schleife über alle Tabellen iterieren (siehe Basic Hilfe). Oder man ermittelt den Tabellenamen wie folgt über die Position des Cursors: Sub Main oViewCursor = ThisComponent.CurrentController.getViewCursor if (not isEmpty(oViewCursor.getPropertyValue(TextTable))) then sTableName = oViewCursor.getPropertyValue(TextTable).Name else msgBox Cursor steht nicht in Tabelle, 64 End if oTable = thisComponent.TextTables.getByName(sTableName) oTblColSeps = oTable.TableColumnSeparators oTblColSeps(0).Position = 800 oTblColSeps(1).Position = 900 oTblColSeps(2).Position = 1600 oTable.TableColumnSeparators = oTblColSeps End Sub Dies löst in meinem Dokument keine Reaktion aus. Ich weiß nicht einmal, ob der Fokus in die Tabelle springt und versucht, dort etwas auszulösen. Der Focus/Cursor wird für die Aktionen nicht benötigt. Hast Du noch eine Idee, wie ich da weiter kommen kann? Was ist bei Dir anders, dass das Makro das macht, was er machen soll - nämlich die Spaltenbreite einstellen? Zieh mal eine neue fünfspaltige Tabelle auf und probier das Makro LibreOffice 3.3.3 OOO330m19 (Build:301) OS: Windoes 7 Prof. (64 bit) ich habe OpenOffice 3.2.1, aber das sollte keinen Unterschied machen, an diese API ist Libre bisher nicht rangegangen. Gruß Peter -- Informationen zum Abmelden: E-Mail an users+h...@de.libreoffice.org Tips zu Listenmails: http://wiki.documentfoundation.org/Netiquette/de Listenarchiv: http://listarchives.libreoffice.org/de/users/ Alle E-Mails an diese Liste werden unlöschbar öffentlich archiviert
Re: [de-users] Writer - Tabelle mittels Makro ansprechen
Hallo Peter, ich bin mehr oder weniger am Ziel angekommen. schnipp Oder man ermittelt den Tabellenamen wie folgt über die Position des Cursors: oViewCursor = ThisComponent.CurrentController.getViewCursor if (not isEmpty(oViewCursor.getPropertyValue(TextTable))) then sTableName = oViewCursor.getPropertyValue(TextTable).Name Damit habe ich Zugriff auf die Tabelle - wahrscheinlich auch schon zuvor. Aber jetzt tut sich was. Ich habe dies mit LO 3.3 und LO 3.4 getestet. So - jetzt noch zwei Anmerkungen: 1) Spaltenbreite: Ich hatte noch ein Verständnisproblem bzgl. der Spaltenbreite. Beim Googlen habe ich aber eine Erklärung gefunden: The column separator specifies where the column ends as percentage of the table width. A column end position of 5000 specifies 50% of the table width. The macro in Listing 8.11 sets the first column to end at 50% of the current table width and the second column at 70% of the total table width. IMHO ist dies nicht optimal, da ich eine Maßeinheit bevorzugen würde. 2) Gimmick: Hast Du evtl. noch einen Tipp, wie ich zu Beginn des Makros prüfen lassen kann, ob die Tabelle fünf Spalten enthält. Kleiner Perfektionswahn von mir. Die betreffenden Tabellen enthalten fünf Spalten. Aber die Überprüfung wäre professioneller. Gruß Jochen -- Informationen zum Abmelden: E-Mail an users+h...@de.libreoffice.org Tips zu Listenmails: http://wiki.documentfoundation.org/Netiquette/de Listenarchiv: http://listarchives.libreoffice.org/de/users/ Alle E-Mails an diese Liste werden unlöschbar öffentlich archiviert
Re: [de-users] Writer - Tabelle mittels Makro ansprechen
Am 14.09.2011 11:34, schrieb Jochen: Hallo Peter, ich bin mehr oder weniger am Ziel angekommen. schnipp Oder man ermittelt den Tabellenamen wie folgt über die Position des Cursors: oViewCursor = ThisComponent.CurrentController.getViewCursor if (not isEmpty(oViewCursor.getPropertyValue(TextTable))) then sTableName = oViewCursor.getPropertyValue(TextTable).Name Damit habe ich Zugriff auf die Tabelle - wahrscheinlich auch schon zuvor. Aber jetzt tut sich was. Ich habe dies mit LO 3.3 und LO 3.4 getestet. So - jetzt noch zwei Anmerkungen: 1) Spaltenbreite: Ich hatte noch ein Verständnisproblem bzgl. der Spaltenbreite. Beim Googlen habe ich aber eine Erklärung gefunden: The column separator specifies where the column ends as percentage of the table width. A column end position of 5000 specifies 50% of the table width. The macro in Listing 8.11 sets the first column to end at 50% of the current table width and the second column at 70% of the total table width. IMHO ist dies nicht optimal, da ich eine Maßeinheit bevorzugen würde. 2) Gimmick: Hast Du evtl. noch einen Tipp, wie ich zu Beginn des Makros prüfen lassen kann, ob die Tabelle fünf Spalten enthält. Kleiner Perfektionswahn von mir. Die betreffenden Tabellen enthalten fünf Spalten. Aber die Überprüfung wäre professioneller. if oTable.Columns.Count 5 then msgBox Tabelle enthält oTable.Columns.Count Spalten!, 16 exit Sub end If Gruß Peter -- Informationen zum Abmelden: E-Mail an users+h...@de.libreoffice.org Tips zu Listenmails: http://wiki.documentfoundation.org/Netiquette/de Listenarchiv: http://listarchives.libreoffice.org/de/users/ Alle E-Mails an diese Liste werden unlöschbar öffentlich archiviert
Re: [de-users] Writer - Tabelle mittels Makro ansprechen
Am 14.09.2011 11:34, schrieb Jochen: Hallo Peter, 1) Spaltenbreite: Ich hatte noch ein Verständnisproblem bzgl. der Spaltenbreite. Beim Googlen habe ich aber eine Erklärung gefunden: The column separator specifies where the column ends as percentage of the table width. A column end position of 5000 specifies 50% of the table width. The macro in Listing 8.11 sets the first column to end at 50% of the current table width and the second column at 70% of the total table width. IMHO ist dies nicht optimal, da ich eine Maßeinheit bevorzugen würde. Was machst Du bei Ausrichtung Tabelle automatisch, wenn danach die Seitenränder geändert werden? Die Tabelle pass sich ja an. Insofern kann es keine absoluten Werte geben. Gruß Peter -- Informationen zum Abmelden: E-Mail an users+h...@de.libreoffice.org Tips zu Listenmails: http://wiki.documentfoundation.org/Netiquette/de Listenarchiv: http://listarchives.libreoffice.org/de/users/ Alle E-Mails an diese Liste werden unlöschbar öffentlich archiviert
Re: [de-users] Writer - Tabelle mittels Makro ansprechen
Hi Jochen, Am 10.09.2011 16:48, schrieb Jochen: oTblColSeps(0).Position = 800 oTblColSeps(1).Position = 900 oTblColSeps(2).Position = 1600 oTable.TableColumnSeparators = oTblColSeps wenn das Makro im Dokument gespeichert ist dann: Sub Main oTable = thisComponent.TextTables.getByName(MeinTabellenname) oTblColSeps = oTable.TableColumnSeparators oTblColSeps(0).Position = 800 oTblColSeps(1).Position = 900 oTblColSeps(2).Position = 1600 oTable.TableColumnSeparators = oTblColSeps End Sub Gruß Peter -- Informationen zum Abmelden: E-Mail an users+h...@de.libreoffice.org Tips zu Listenmails: http://wiki.documentfoundation.org/Netiquette/de Listenarchiv: http://listarchives.libreoffice.org/de/users/ Alle E-Mails an diese Liste werden unlöschbar öffentlich archiviert
Re: [de-users] Writer - Tabelle mittels Makro ansprechen
Hallo Peter, Am 13.09.2011 08:43, schrieb Peter Eberlein: Sub Main oTable = thisComponent.TextTables.getByName(MeinTabellenname) oTblColSeps = oTable.TableColumnSeparators oTblColSeps(0).Position = 800 oTblColSeps(1).Position = 900 oTblColSeps(2).Position = 1600 oTable.TableColumnSeparators = oTblColSeps End Sub Vielen Dank für Deinen Tipp. Aber es bestehen noch zwei Probleme: 1) Tabellenname: In Deinem Beispiel wird die MeinTabellenname angesprochen. Das Problem ist jedoch, dass ich das Makro auf verschiedenen Tabellen anwenden möchte - und diese haben unterschiedliche Namen. Gibt es dafür eine Lösung? 2) Spaltenbreiten: Die im Makro definierten Spaltenbreiten werden in der Tabelle nicht übernommen. Bemerkung: ich habe zuvor den Tabellennamen im Makro dem Tabellennamen im Writer-Dokument angepasst, d.h. bei einem Testdokument lautet der Tabellenname Tabelle1. Frage: hast Du das Makro konkret auf Funktionalität überprüft bzw. woran kann es liegen, dass der Spaltenbreiten nicht wie gewünscht per Makro eingestellt werden. Gruß Jochen -- Informationen zum Abmelden: E-Mail an users+h...@de.libreoffice.org Tips zu Listenmails: http://wiki.documentfoundation.org/Netiquette/de Listenarchiv: http://listarchives.libreoffice.org/de/users/ Alle E-Mails an diese Liste werden unlöschbar öffentlich archiviert
Re: [de-users] Writer - Tabelle mittels Makro ansprechen
Am 13.09.2011 13:04, schrieb Jochen: Hallo Peter, Am 13.09.2011 08:43, schrieb Peter Eberlein: Sub Main oTable = thisComponent.TextTables.getByName(MeinTabellenname) oTblColSeps = oTable.TableColumnSeparators oTblColSeps(0).Position = 800 oTblColSeps(1).Position = 900 oTblColSeps(2).Position = 1600 oTable.TableColumnSeparators = oTblColSeps End Sub Vielen Dank für Deinen Tipp. Aber es bestehen noch zwei Probleme: 1) Tabellenname: In Deinem Beispiel wird die MeinTabellenname angesprochen. Das Problem ist jedoch, dass ich das Makro auf verschiedenen Tabellen anwenden möchte - und diese haben unterschiedliche Namen. Gibt es dafür eine Lösung? Du kannst die Tabellen auch mit getByIndex() ansprechen (nullbasiert)... 2) Spaltenbreiten: Die im Makro definierten Spaltenbreiten werden in der Tabelle nicht übernommen. Bemerkung: ich habe zuvor den Tabellennamen im Makro dem Tabellennamen im Writer-Dokument angepasst, d.h. bei einem Testdokument lautet der Tabellenname Tabelle1. Frage: hast Du das Makro konkret auf Funktionalität überprüft bzw. woran kann es liegen, dass der Spaltenbreiten nicht wie gewünscht per Makro eingestellt werden. Ja ich habe mal kurz durchgetestet. Hast Du Zellen gemerged? Wieviele Spalten hat Deine Tabelle (im vorliegenden Fall müssten es mindestens 5 sein). Peter -- Informationen zum Abmelden: E-Mail an users+h...@de.libreoffice.org Tips zu Listenmails: http://wiki.documentfoundation.org/Netiquette/de Listenarchiv: http://listarchives.libreoffice.org/de/users/ Alle E-Mails an diese Liste werden unlöschbar öffentlich archiviert
Re: [de-users] Writer - Tabelle mittels Makro ansprechen
Hallo Peter, Am 13.09.2011 13:28, schrieb Peter Eberlein: Du kannst die Tabellen auch mit getByIndex() ansprechen (nullbasiert)... Syntax: oTable = thisComponent.TextTables.getByIndex() Frage: Spricht dieser Befehl eine beliebige Tabelle an, in der der Cursor steht? Oder spricht dieser Befehl alle im Dokument vorhandene Tabellen an? Hast Du Zellen gemerged? Nein. Die Testtabelle habe erstellt, indem ich 1Tabulator2Tabulator3 (ohne Anführungszeichen) eingegeben habe, die Zeile markiert habe und unter Tabelle - Umwandeln - Text in Tabelle - Trennzeichen im Text Tabulator angeklickt habe. Die Testtabelle Tabelle1 enthält jetzt nur eine (1) Zeile. Aber auch mit zwei oder mehr Zeilen läuft das Makro auch nicht. Wieviele Spalten hat Deine Tabelle (im vorliegenden Fall müssten es mindestens 5 sein). Meine Testtabelle hat zu Testzwecken zwei, drei oder vier Spalten enthalten. Aufgrund Deines Hinweises habe ich eine fünfte Spalte eingefügt. Aber auch da tut sich nichts. Ich verstehe auch nicht, warum oTblColSeps(0).Position = 800 oTblColSeps(1).Position = 900 oTblColSeps(2).Position = 1600 fünf Spalten anspricht und nicht drei Spalten? Ich gehe davon aus, dass Du den Quellcode Deines Makros, das die Spaltenbreite steuert bzw. die gewünschten Sapltenbreiten einstellt, gepostet hast. Logischerweise muss der Fehler bei mir bzw. in meinem Dokument liegen. Aber welcher? Gruß Jochen PS: der Quellcode Deines Makros Sub Main oTable = thisComponent.TextTables.getByName(MeinTabellenname) oTblColSeps = oTable.TableColumnSeparators oTblColSeps(0).Position = 800 oTblColSeps(1).Position = 900 oTblColSeps(2).Position = 1600 oTable.TableColumnSeparators = oTblColSeps End Sub -- Informationen zum Abmelden: E-Mail an users+h...@de.libreoffice.org Tips zu Listenmails: http://wiki.documentfoundation.org/Netiquette/de Listenarchiv: http://listarchives.libreoffice.org/de/users/ Alle E-Mails an diese Liste werden unlöschbar öffentlich archiviert
Re: [de-users] Writer - Tabelle mittels Makro ansprechen
Am 13.09.2011 14:09, schrieb Jochen: Hallo Peter, Am 13.09.2011 13:28, schrieb Peter Eberlein: Du kannst die Tabellen auch mit getByIndex() ansprechen (nullbasiert)... Syntax: oTable = thisComponent.TextTables.getByIndex() Frage: Spricht dieser Befehl eine beliebige Tabelle an, in der der Cursor steht? Oder spricht dieser Befehl alle im Dokument vorhandene Tabellen an? getByIndex(0) spricht die erste, getByIndex(1) die zweite an usw. Ich verstehe auch nicht, warum oTblColSeps(0).Position = 800 oTblColSeps(1).Position = 900 oTblColSeps(2).Position = 1600 fünf Spalten anspricht und nicht drei Spalten? weil der Column Separator die Separierung zwischen den Spalten steuert, da bleiben die erste und die letzte natürlich außen vor. Gruß Peter -- Informationen zum Abmelden: E-Mail an users+h...@de.libreoffice.org Tips zu Listenmails: http://wiki.documentfoundation.org/Netiquette/de Listenarchiv: http://listarchives.libreoffice.org/de/users/ Alle E-Mails an diese Liste werden unlöschbar öffentlich archiviert
Re: [de-users] Writer - Tabelle mittels Makro ansprechen
Hallo Peter, ich hoffe, dass ich Dich nicht allzu nerve. Aber für mich besteht noch Diskussionsbedarf. Am 13.09.2011 15:34, schrieb Peter Eberlein: getByIndex(0) spricht die erste, getByIndex(1) die zweite an usw. Mein Ziel ist es, dass ich in eine beliebige Tabelle klicke und dass das Makro die Spalteneinstellung für diese Tabelle ausführt. Der Weg über den Tabellennamen oder die Tabellenziffer ermöglicht dies nicht. Gibt es da eine Lösungsmöglichkeit. Quellcode Deines Makros: Sub Main oTable = thisComponent.TextTables.getByName(MeinTabellenname) oTblColSeps = oTable.TableColumnSeparators oTblColSeps(0).Position = 800 oTblColSeps(1).Position = 900 oTblColSeps(2).Position = 1600 oTable.TableColumnSeparators = oTblColSeps End Sub Dies löst in meinem Dokument keine Reaktion aus. Ich weiß nicht einmal, ob der Fokus in die Tabelle springt und versucht, dort etwas auszulösen. Hast Du noch eine Idee, wie ich da weiter kommen kann? Was ist bei Dir anders, dass das Makro das macht, was er machen soll - nämlich die Spaltenbreite einstellen? LibreOffice 3.3.3 OOO330m19 (Build:301) OS: Windoes 7 Prof. (64 bit) Gruß Jochen -- Informationen zum Abmelden: E-Mail an users+h...@de.libreoffice.org Tips zu Listenmails: http://wiki.documentfoundation.org/Netiquette/de Listenarchiv: http://listarchives.libreoffice.org/de/users/ Alle E-Mails an diese Liste werden unlöschbar öffentlich archiviert