Seite 1 von 1

Tabelle: Spalten anfügen, OHNE Breite anderer Spalten zu verändern

Verfasst: Mo 4. Mär 2019, 08:37
von volvox
Liebe Foren-Kolleg_innen,

meine Frage betrifft einen sehr häufigen Vorgang, ich vermute daher, dass es eine entsprechende Instellung in Writer gibt, habe aber auf Anhieb keine Lösung gefunden.

Problem:
- Ich habe eine Tabelle, die ich nach meinen Vorstellungen formatiert habe.
- Nun möchte ich ganz einfach eine (oder mehrere) Spalten rechts anfügen.
- Mache ich das mittels Einfügen/Spalten rechts, Einfügen/Spalten... oder mit dem entsprechenden Button, wird zwar eine Spalte angefügt, die in ihren Dimensionen derjenigen gleicht, in der ich meinen Cursor stehen hatte;
ABER leider werden automatisch auch die Spaltenbreiten der links der neu eingefügten Spalten verändert.
Das macht mich verrückt, nach jeder Erweiterung einer Tabelle muss ich sie insgesamt neu formatieren - sehr unpraktisch!
Logisch wäre ein solches Verhalten nur, wenn durch die neu angefügten Spalten ein Teil der Tabelle vom Blatt verdrängt würde.

Es ist mir ehrlich gesagt schleierhaft, wie ein solches Verhalten als Default vorgesehen werden konnte,
aber wenn es eine Einstellung gibt, dieses Verhalten einfach zu ändern, sei es mir recht.

Frage:

--> Gibt es also eine Einstellung, mit der ich festlegen kann, dass hinzugefügte Spalten den Rest der Tabelle einfach völlig unverändert lassen; und wo kann ich sie finden?

Ich danke im Voraus für eure Hilfe.

Grüße aus Wien!

Re: Tabelle: Spalten anfügen, OHNE Breite anderer Spalten zu verändern

Verfasst: Mo 4. Mär 2019, 09:58
von Mondblatt24
Hallo,
Nun möchte ich ganz einfach eine (oder mehrere) Spalten rechts anfügen.
Spalten werden nicht angefügt, sondern nur in die bestehende Tabelle eingefügt.

Gruß Peter

Re: Tabelle: Spalten anfügen, OHNE Breite anderer Spalten zu verändern

Verfasst: Mo 4. Mär 2019, 10:06
von Pit Zyclade
volvox hat geschrieben:
Mo 4. Mär 2019, 08:37
... Mache ich das mittels Einfügen/Spalten rechts, Einfügen/Spalten... oder mit dem entsprechenden Button, wird zwar eine Spalte angefügt, die in ihren Dimensionen derjenigen gleicht, in der ich meinen Cursor stehen hatte;
ABER leider werden automatisch auch die Spaltenbreiten der links der neu eingefügten Spalten verändert...
...
Dem ist nicht so. Diese Spalte wird ebenfalls schmaler. Übrigens ist es völlig gleich, ob man die Spalte vor oder nach der betreffenden einfügt. Einzig die Tabellenbreite bleibt unverändert. (Jedenfalls stimmt meine Feststellung bei leerer Tabelle.)

Nein, für deinen Wunsch habe ich derzeit auch keine Lösung.

Re: Tabelle: Spalten anfügen, OHNE Breite anderer Spalten zu verändern

Verfasst: Mo 4. Mär 2019, 15:20
von volvox
@ Pit Zyclade:
Stimmt, du hast, recht, auch die anderen Spalten werden in ihrer Breite verändert.
Schade, dass man das Verhalten diesbezüglich scheinbar nicht festlegen kann; aber vielleicht kommt das ja noch :)
Danke jedenfalls für dein Bemühen.

@ Mondblatt24:
Nun, ich habe das absichtlich so formuliert, um meine Ausgangssituation möglichst genau zu beschreiben (da ich kein Bild raufladen kann);
Anfügen beschreibt, wie ich meine sprachlich korrekt, das Hinzufügen von Spalten an ein Ende einer Tabelle, das Einfügen das Hinzufügen im Binnenbereich einer Tabelle, also an einer Stelle, an der sowohl links als auch rechts mindestens eine Spalte liegt ;)
(Mag sein, dass in der Dokumentation von LO immer nur von Einfügen die Rede ist)

Wie dem auch sei, draußen scheint die Sonne ;)

LG

Re: Tabelle: Spalten anfügen, OHNE Breite anderer Spalten zu verändern

Verfasst: Mo 4. Mär 2019, 18:30
von F3K Total
Hallo volvox,
ich wollte es wissen: Mit folgendem Makro, wird rechts an die Tabelle, in der der Cursor steht, eine 1 cm breite Spalte angehängt,
Beispieldatei anbei.

Code: Alles auswählen

Sub Insert_one_column
    oTexttable = thiscomponent.Currentselection(0).Texttable
    oTexttable.HoriOrient = 3
    nWidth = oTexttable.Width
    nColumnWidth = 1000 '1 cm
    oColumns = oTexttable.Columns
    nCount = oColumns.count
    oTableColumnSeparators = oTexttable.TableColumnSeparators
    dim nPos(nCount-1) as integer
    for i = 0 to uBound(oTableColumnSeparators)
        nPos(i) = oTableColumnSeparators(i).Position * nWidth /(nWidth + nColumnWidth)
    next i
    nPos(i) = 10000 * nWidth /(nWidth + nColumnWidth)'neue Spalte beginnt bei der alten Breite
    oColumns.insertByIndex( nCount, 1)
    oTableColumnSeparators = oTexttable.TableColumnSeparators
    for i = 0 to uBound(oTableColumnSeparators)
        oTCSs = oTableColumnSeparators
        oTCS = oTCSs(i)
        oTCS.Position = nPos(i)
        oTCSs(i)= oTCS
    next i
    oTexttable.Width = oTexttable.Width + nColumnWidth 'Tabelle breiter machen
    oTexttable.TableColumnSeparators = oTCSs 'Spalten wieder ausrichten
End Sub
Damit das Makro laufen darf, stellst du unter Extras/Einstellungen/Openoffice/Sicherheit/Makrosicherheit oder Extras/Optionen/LibreOffice/Sicherheit/Makrosicherheit mindestens die Stufe Mittel ein, dann wirst du beim Öffnen von Dokumenten gefragt, ob du Makros ausführen möchtest.
Gruß R

Re: Tabelle: Spalten anfügen, OHNE Breite anderer Spalten zu verändern

Verfasst: Di 5. Mär 2019, 16:40
von F3K Total
Hallo,
hatte ich gestern noch vor, habe es aber nicht mehr geschafft. Folgendes Makro fügt eine Spalte ein, die die verfügbare Seitenbreite exakt ausnutzt, d.h. die Tabelle ist nach dem Einfügen der Spalte genau so breit, wie dier beschreibbare Bereich der aktuellen Seite.
Alle vorigen Spalten bleiben in ihrer Breite erhalten.

Code: Alles auswählen

Sub Insert_one_column
    oSel = thiscomponent.Currentselection(0)
    oTexttable = thiscomponent.Currentselection(0).Texttable
    oTexttable.HoriOrient = 3
    sPageStyle = oSel.PageStyleName
    oStyle = Thiscomponent.StyleFamilies.PageStyles.getbyName(sPageStyle)
    nPW = oStyle.Width
    nPRM = oStyle.RightMargin
    nPLM = oStyle.LeftMargin
    nWidth = oTexttable.Width
    nColumnWidth = nPW - nPRM - nPLM - nWidth
    oColumns = oTexttable.Columns
    nCount = oColumns.count
    oTableColumnSeparators = oTexttable.TableColumnSeparators
    dim nPos(nCount-1) as integer
    for i = 0 to uBound(oTableColumnSeparators)
        nPos(i) = oTableColumnSeparators(i).Position * nWidth /(nWidth + nColumnWidth)
    next i
    nPos(i) = 10000 * nWidth /(nWidth + nColumnWidth)'neue Spalte beginnt bei der alten Breite
    oColumns.insertByIndex( nCount, 1)
    oTableColumnSeparators = oTexttable.TableColumnSeparators
    for i = 0 to uBound(oTableColumnSeparators)
        oTCSs = oTableColumnSeparators
        oTCS = oTCSs(i)
        oTCS.Position = nPos(i)
        oTCSs(i)= oTCS
    next i
    oTexttable.Width = oTexttable.Width + nColumnWidth 'Tabelle breiter machen
    oTexttable.TableColumnSeparators = oTCSs 'Spalten wieder ausrichten
End Sub
Gruß R