Announcement

Collapse
No announcement yet.

Spaltenzahl einer Tabellenzelle ermitteln (rowspan/colspan)

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Spaltenzahl einer Tabellenzelle ermitteln (rowspan/colspan)

    Hallo zusammen,
    folgendes Problem stellt sich mir gerade:

    Es sollen XML Tabellen in XSL-Fo Tabellen kovertiert werden. So weit so gut. Nun sind aber in den Spaltendefinitionen (wie bei CALS colspec) Formatierungen enthalten die über fo:table-column nicht umsetzbar, bzw. nicht zugelassen sind.

    Da die Formatierung hirarchisch abgearbeitet werden soll (um Schreibarbeit zu sparen) muss ich Tabellenzellen anhand der Spaltedefinition formatieren.

    Dafür muss ich wissen in welcher Spalte sich eine Zelle befindet. Gäbe es nur Colspans wäre das auch nicht weiter tragisch. Spannend wird es dann wenn Rowspans dazu kommen, da von Zeile zu Zeile ein Übertrag stattfinden muss in dem steht welche Zellen durch vorhergehende Rowspans "besetzt" sind. (Ob meine Colspanlösung dann noch Sinn macht ist auch fraglich.)

    Tabelle sieht z.B. so aus, maximale Spaltenzahl (@cols) wird immer angegeben:

    HTML Code:
    <table cols="4">
      <column col-num="1" align="center" />
      <column col-num="2" align="right" />
      <column col-num="3" align="center" />
      <column col-num="4" align="left" />
      <row>
        <cell rowspan="2">Blablubb</cell>
        <cell>Blablubb</cell>
        <cell rowspan="2">Blablubb</cell>
        <cell>Blablubb</cell>
      <row>
      <row>
        <cell>Blablubb</cell>
        <cell>Blablubb</cell>
      </row>
    </table>
    Wenn man die Zellen einfach nur nach Ihrer Position nummeriert kommt natürlich folgendes raus:
    Code:
    _________________
    |1  |2  |3  |4  |
    |   |---|   |---|
    |   |1  |   |2  |
    -----------------
    Als Ergebnis brauche ich aber:
    Code:
    _________________
    |1  |2  |3  |4  |
    |   |---|   |---|
    |   |2  |   |4  |
    -----------------
    Meine, wahrscheinlich sehr abenteuerliche, Idee zur Vorgehensweise:
    • Tabelle matchen
    • Variable erstellen die einen Baum an Zellen beinhaltet die ein @rowspan_uebertrag (beim erstellen wert 0) haben.
      -> Diese Variable soll als Schablone für die Zählung dienen.

    Hier in dem Fall also:
    @rowspan_uebertrag Startwerte:
    HTML Code:
    <cell rowspan_uebertrag="0"/>
    <cell rowspan_uebertrag="0"/>
    <cell rowspan_uebertrag="0"/>
    <cell rowspan_uebertrag="0"/>
    @rowspan_uebertrag nach erste Zeile:
    HTML Code:
    <cell rowspan_uebertrag="1"/>
    <cell rowspan_uebertrag="0"/>
    <cell rowspan_uebertrag="1"/>
    <cell rowspan_uebertrag="0"/>
    Wenn ich nun eine Zelle erstellen will, frage ich ab ob in der Schablone Position 1 größer 0 ist. Wenn ja ist die Position der Zelle 1+1=2.
    Nun erstelle ich die nächste Zelle (2+1) und Prüfe ob in der Schablone Position 3 größer 0 ist. Da wieder ja, zähle ich wieder 1 dazu und komme auf die 4.

    Also jedesmal wenn in der Schablone die aktuelle Position größer 0 ist zähle ich 1 zur Position dazu bis ich am Ende der Schablone angekommen bin.

    Dann müsste ich natürlich die Position in der Schablone auch immer um eins verringern.

    Wie ich das dann mit den Templates mache weis ich auch noch nicht. Variable können ja nicht überschrieben werden. Ich denke es müssen Templates sein die sich gegenseitig aufrufen.

    Denkt jemand das das so gehen könnte oder hat jemand eine andere Lösung?

    Bin ganz schön am verzweifeln und freu mich über jeden Tip!

    Grüße, tomaz
    Zuletzt editiert von tomaz01; 29.09.2008, 15:54.
Working...
X