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:
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
-
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
-
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.
-
Damit man sich das vorstellen kann, hier ein Bild.
-
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
-
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:
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.
-
Da hast du beim Abändern irgendetwas gelöscht, mein Original sieht so aus (mit Platzhalter):
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
-
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. ;)
-
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