0

Inhaltsverzeichnis mit mehreren Ebenen darstellen

Ich habe eine Tabelle, in der ich Bücher verwalte. Bei einigen nehem ich das Inhaltsverzeichnis mit auf. Ein Inhaltsverzeichnis kann mehrere Ebenen haben. Ich habe für ein Buch also eine Kompositionstabelle angelegt für die Überschriften der ersten Ebene. Dort dann eine Kompositionstabelle für die Überschriften der zweiten Ebene. Und so bis zur vierten Ebene.

So sieht das Datenbodel aus:

Bildschirmfoto 2018-09-28 um 14.45.39

Wie kann ich jetzt in einem Formelfeld mir die Überschriften ausgeben lassen, damit Überschriften der unteren Ebenen unter den Ebenen darüber angeordnet sind. Vermutlich mit einer Schleife. Aber ich komme nicht drauf. Das Ergebnis sollte eben wie ein Inhaltsverzeichnis aussehen.

Überschrift 1. Ebene 1
Unterüberschrift 1. Ebene 2
Unterüberschrift 2. Ebene 2
...

Überschrift 2. Ebene 1
Unterüberschrift 1. Ebene 2
Ebene 3. 1. Überschrift
Ebene 3. 2. Überschrift
Ebene 4. Überschrift 1
...
...
Unterüberschrift 2. Ebene 2
...

Überschrift 3. Ebene 1
Unterüberschrift 1. Ebene 2
Unterüberschrift 2. Ebene 2
...

...

8 Antworten

null
    • Leonid_Semik
    • vor 6 Jahren
    • Gemeldet - anzeigen

    Hallo Wilhelm,

    bei 4 Ebenen und jeweils 1 Leerzeichen Veratz:

    ---

    join(Ebene1.(Titel + if cnt(Ebene2) = 0 then
    ""
    else
    "
     " + join(Ebene2.(Titel + if cnt(Ebene3) = 0 then
    ""
    else
    "
      " + join(Ebene3.(Titel + if cnt(Ebene4) = 0 then
    ""
    else
    "
       " + join(Ebene4.Titel, "
       ")
    end), "
      ")
    end), "
     ")
    end), "
    ")

    ---

    Leo

    • Wilhelm_Diegel
    • vor 6 Jahren
    • Gemeldet - anzeigen

    Lieber Leo,

    vielen Dank. Das ist ganz anders als ich es mir dachte. Ich dachte, dass man diese Sache irgendwie mit veschachtelten Schleifen umsetzen muss. Aber so hat es geklappt.

    Nun geht es weiter. Ist es irgendwie möglich, die Überschriften automatisch zu nummerieren. Und zwar möchte ich das pro Ebene unabhängig machen. In manchen Büchern ist die erste Ebene numerisch formatiert (1. Überschrift) und die zweite dann alphabetisch (a. Unterüberschrift). Um das zu erreichen, dachte ich an ein Auswahlfeld mit den drei Buttons. 1. Ohne, 2. numerisch. 3. alphabetisch. 

    Je nachdem, welche Auwahl gedrückt wird, soll er mir die entsprechende Ebene numerisch oder alphabetisch oder ohne Format formatieren. Jede Kompositionstabelle (für jede Ebene) hat also dieses Auswahlfeld mit diesen drei Optionen. Damit möchte ich unabhäng der Ebene das Format der Nummerierung manipulieren können.

    • Wilhelm_Diegel
    • vor 6 Jahren
    • Gemeldet - anzeigen

    Damit man sich das vorstellen kann, hier ein Bild.

    Bildschirmfoto 2018-09-28 um 16.56.28

    • Leonid_Semik
    • vor 6 Jahren
    • Gemeldet - anzeigen

    Oh, Wilhelm,

    als Denksport ist es natürlich eine sehr interessante Aufgabe. Die Formel wäre dann:

    ---

    let myA := "abcdefghijklmnopqrstuvwxyz";
    join(Ebene1.(
    let myNR := number(Nr);
    switch 'Bücher'.'Nummerierung für die 1. Ebene' do
    case 1:
    ""
    case 2:
    text(cnt('Bücher'.Ebene1[number(Nr) <= myNR])) + ". "
    case 3:
    substr(myA, cnt('Bücher'.Ebene1[number(Nr) < myNR]), 1) + ". "
    end + Titel + if cnt(Ebene2) = 0 then
    ""
    else
    "
     " + join(Ebene2.(
    let myNR := number(Nr);
    switch Ebene1.'Bücher'.'Nummerierung für die 2. Ebene' do
    case 1:
    ""
    case 2:
    text(cnt(Ebene1.Ebene2[number(Nr) <= myNR])) + ". "
    case 3:
    substr(myA, cnt(Ebene1.Ebene2[number(Nr) < myNR]), 1) + ". "
    end + Titel + if cnt(Ebene3) = 0 then
    ""
    else
    "
      " + join(Ebene3.(
    let myNR := number(Nr);
    switch Ebene2.Ebene1.'Bücher'.'Nummerierung für die 3. Ebene' do
    case 1:
    ""
    case 2:
    text(cnt(Ebene2.Ebene3[number(Nr) <= myNR])) + ". "
    case 3:
    substr(myA, cnt(Ebene2.Ebene3[number(Nr) < myNR]), 1) + ". "
    end + Titel + if cnt(Ebene4) = 0 then
    ""
    else
    "
       " + join(Ebene4.(
    let myNR := number(Nr);
    switch Ebene3.Ebene2.Ebene1.'Bücher'.'Nummerierung für die 4. Ebene' do
    case 1:
    ""
    case 2:
    text(cnt(Ebene3.Ebene4[number(Nr) <= myNR])) + ". "
    case 3:
    substr(myA, cnt(Ebene3.Ebene4[number(Nr) < myNR]), 1) + ". "
    end + Titel
    ), "
       ")
    end
    ), "
      ")
    end
    ), "
     ")
    end
    ), "
    ")

    ----

     

    Wenn du aber außer Inhaltsverzeichnis keine Texte rein schreibst, dann ist es (glaube ich zumindest) viel einfacher ein formatiertes Textfeld dazu nemen und alles einfach reinschreiben.

     

    Leo

    • Wilhelm_Diegel
    • vor 6 Jahren
    • Gemeldet - anzeigen

    Lieber Leo,

    super. So passt es. Es gibt noch zwei Kleinigkeiten, die nicht ganz passen, aber ich versuche es erst einmal selbst. Bei der ersten Ebene habe ich noch ein "Ja/Nein"-Feld. Damit will ich entscheiden, ob eine Überschrift bei der Nummerierung berücksichtigt werden soll oder nicht. Bis jetzt hatte ich noch keinen Erfolg, die Bedingung erfolgreich einzubauen.

    Die zweite Kleinigkeit betrifft die Abstände. Im Bild sieht man, was ich meine:

    Bildschirmfoto 2018-09-29 um 11.46.37

     

    Wenn unter einer Überschrift in der zweiten Ebene Überschriften der 3. Ebene eingefügt werden, fügt er auch zwischen den anderen Überschriften der zweiten Ebene, die keine weiteren Überschriften der 3. Ebene haben, einen Abstand ein. Zwischen Ebene 1 und 2 scheint das nicht der Fall zu sein. Ich weiß allerdings nicht, ob man das beeinflussen kann.

    Aber vielen Dank. Ich werde diesen Teil ins Webinar-Team stellen.

    • Leonid_Semik
    • vor 6 Jahren
    • Gemeldet - anzeigen

    Da hast du beim Abändern irgendetwas gelöscht, mein Original sieht so aus (mit Platzhalter):

    Bildschirmfoto 2018-09-29 um 12.29.41

    Für diese Abstände sind volgende Skripte zuständig:

    ----

    + if cnt(Ebene2) = 0 then
    ""
    else
    "
     "

    -----

    + if cnt(Ebene3) = 0 then
    ""
    else
    "
      "

    -----

    + if cnt(Ebene4) = 0 then
    ""
    else
    "
       "

    -----

     

    Leo

    • Ninox-Professional
    • planoxpro
    • vor 6 Jahren
    • Gemeldet - anzeigen

    Interessantes Konstrukt. Wäre ich so nie drauf gekommen. Danke für's Teilen. Gut möglich, dass ich mir die Idee mal für eigene Zwecke "ausleihen" werde. ;)

    • Leonid_Semik
    • vor 6 Jahren
    • Gemeldet - anzeigen

    Not macht erfinderisch. Ninox kann keine Unter-/Untertabellen in PDF darstellen. HTML geht auch nicht. Einziges was geht: alles in ein Textfeld reinquetschen. Z.B. detailierte Rechnungspositionen bei Handwerkerleistungen.

    Leo

Content aside

  • vor 6 JahrenZuletzt aktiv
  • 8Antworten
  • 3549Ansichten