🙏 Bitte helfen Sie uns das LibreOffice Forum zu erhalten. 🙏
Ihre Spende wird für die Deckung der laufenden Kosten sowie den Erhalt und Ausbau 🌱 des LibreOffice Forums verwendet.

🍀 Wir hoffen auf Ihre Unterstützung - vielen Dank!🍀

❤️ DANKE >> << DANKE ❤️

>> Dank Ihrer Unterstützung -> Keine Werbung für alle registrierten LibreOffice-Forum User! <<
🤗 Als Dankeschön werden Sie im Forum als LO-SUPPORTER gekennzeichnet. 🤗

Stichwortverzeichnis / Register über eine vorhandene Tabelle

Alles zur Programmierung im LibreOffice.
anton
Beiträge: 59
Registriert: Di 10. Jul 2012, 11:37

Stichwortverzeichnis / Register über eine vorhandene Tabelle

Beitrag von anton » Mo 23. Dez 2024, 17:31

Hallo,
diese Frage habe ich schon im Bereich "Writer" gestellt - aber das, was ich will, muss man wohl programmieren?

Es existiert eine Tabelle im writer mit mehreren Spalten und vielen Zeilen.
Über den Inhalt dieser Tabelle, eine Liste über vorhandene Filme, möchte ich ein Stichwortverzeichnis / ein Register erstellen.

Kurze Beschreibung der Tabelle:
Spalte 1: Filmnummer; die Nummer beginnt nach einem Themenwechsel neu.
Spalte 2: Darsteller, Beteiligte - in mehreren Zeilen. Nach diesen soll im Stichwortverzeichnis gesucht werden.
Spalte 3: Filmtitel in der ersten Zeile, Beschreibungen folgen in den nächsten Zeilen;
nur die erste Zeile soll für das Verzeichnis verwendet werden.

Aufbau des Stichwortverzeichnisses:
Spalte 1: Name Beteiligte, jeweils nur ein Name.
Spalte 2: Filmtitel
Spalte 3: Filmnummer

Sortierung des Stichwortverzeichnisses:
Nach Spalte 1 und dann nach Spalte 2

Wie das zu machen ist?
Ich habe keinen blassen Schimmer.

Vielen Dank für Hinweise.
anton

F3K Total
* LO-Experte *
Beiträge: 2501
Registriert: So 10. Apr 2011, 10:10

Re: Stichwortverzeichnis / Register über eine vorhandene Tabelle

Beitrag von F3K Total » Di 24. Dez 2024, 11:50

Moin,
anton hat geschrieben:
Mo 23. Dez 2024, 17:31
Spalte 1: Filmnummer; die Nummer beginnt nach einem Themenwechsel neu.
Spalte 2: Darsteller, Beteiligte - in mehreren Zeilen. Nach diesen soll im Stichwortverzeichnis gesucht werden.
Spalte 3: Filmtitel in der ersten Zeile, Beschreibungen folgen in den nächsten Zeilen;
nur die erste Zeile soll für das Verzeichnis verwendet werden.
Da hast du für eine anständige Analyse den falschen Aufbau der Tabelle gewählt.
Grundsätzlich:
  • Wenn die Filmnummer mehfach vorkommt kann sie nicht eindeutig zugeordnet werden, eine fortlaufende Nummerierung ist sinnvoll.
  • Wenn du Darsteller und Beteiligte in mehrere Zeilen einer Zelle schreibst erkennt das Programm nur einen einzigen Text, da etwas herauszufischen ist sehr schwierig.
  • Das gleiche gilt für Filmtitel/Beschreibung, auch in einer Zelle, nur sehr schwer auseinanderzuhalten.
Was willst du denn mit deinem Verzeichnis eigentlich erreichen?
Etwas finden, oder etwas sortieren, oder, oder?

Gruß R
Windows 11: AOO, LO Linux Mint: AOO, LO

anton
Beiträge: 59
Registriert: Di 10. Jul 2012, 11:37

Re: Stichwortverzeichnis / Register über eine vorhandene Tabelle

Beitrag von anton » Fr 27. Dez 2024, 14:36

Anmerkung:
Die vorhandene Tabelle ist nun schon sehr groß geraten, sonst käme ich nicht auf die Idee, sie mit einem Stichwortverzeichnis / einem Register zusätzlich zu erschließen.
Die Tabelle umzuarbeiten, damit ich sie besser per Programm erschließen kann, da lerne ich lieber etwas über die Möglichkeiten von Makros in Writer-Tabellen.

Um mir einen Eindruck zu verschaffen:
- Wie spreche ich eine Writer-Tabelle mit einem Makro an?
- Wie sind die Spalten anzusprechen und auszulesen?
- Kann ich einzelne Zeilen in einem Tabellenfeld auslesen?

(Wie schon anfangs bemerkt, ich bin Anfänger)

Pit Zyclade
* LO-Experte *
Beiträge: 3041
Registriert: Mo 12. Nov 2012, 16:59

Re: Stichwortverzeichnis / Register über eine vorhandene Tabelle

Beitrag von Pit Zyclade » Fr 27. Dez 2024, 15:18

Fällt dir gar nicht auf, dass ich dir gar nicht mehr geschrieben habe?
Warum ignorierst du die Antwort von F3K Total , der uns beiden haushoch überlegen ist, völlig??

Ändere den ersten Beitrag von dir noch einmal (!) und nimm endlich "Stichwortverzeichnis" raus!!! Denn das kann ohne deine Vorarbeit auch nichts lösen.

Wenn du meinst, dass deine Writer-Tabelle zu groß sei, um sie zu erweitern oder umzuarbeiten, dann überführe sie nach calc!
Da kannst du dann Spalten beliebig einfügen, so z.B vor die erste Spalte eine mit der fortlaufenden Nummerierung.

Also erst einmal die einfachen Sachen lernen, bevor man anfängt Tabellen im writer mittels Makro zu bearbeiten. Denn dass wird garantiert nicht einfacher.
LO 24.8.7.2 (X86_64) / Windows 11 64bit
Problem gelöst? Dann bitte im Betreff der ersten Nachricht [gelöst] voranstellen.

anton
Beiträge: 59
Registriert: Di 10. Jul 2012, 11:37

Re: Stichwortverzeichnis / Register über eine vorhandene Tabelle

Beitrag von anton » Fr 27. Dez 2024, 15:50

Ich will mich nicht über Begriffe streiten, trotzdem https://de.wikipedia.org/wiki/Stichwort ... erzeichnis

Bei einem Themenwechsel kann ich die Tabelle teilen, das ist kein Problem -> die Nummern sind dann eindeutig.
Dann erstelle ich mehrere ...verzeichnisse ...register.

Schön wären Hinweise auf meine Fragen.

Pit Zyclade
* LO-Experte *
Beiträge: 3041
Registriert: Mo 12. Nov 2012, 16:59

Re: Stichwortverzeichnis / Register über eine vorhandene Tabelle

Beitrag von Pit Zyclade » Fr 27. Dez 2024, 16:52

anton hat geschrieben:
Fr 27. Dez 2024, 15:50
Ich will mich nicht über Begriffe streiten, trotzdem https://de.wikipedia.org/wiki/Stichwort ... erzeichnis
...
Ein Stichwortverzeichnis in LibreOffice oder ähnlichen wird entweder durch Markierung jedes Begriffs und Aufnahme in das Stichwortregister oder durch Schreibung in eine Konkordanzdatei, die dann mit dem Register verlinkt wird erzeugt.

Wenn man bereits vorhandene Listen nicht neu schreiben will, sollte man sein Produkt (vielleicht) einfach in die Form einer Konkordanzdatei überführen und die dann verlinken. Dann wäre dein Wunsch erfüllt.

Aber man kann vielleicht was anderes machen. Weihnachten ist ja vorbei.
LO 24.8.7.2 (X86_64) / Windows 11 64bit
Problem gelöst? Dann bitte im Betreff der ersten Nachricht [gelöst] voranstellen.

anton
Beiträge: 59
Registriert: Di 10. Jul 2012, 11:37

Re: Stichwortverzeichnis / Register über eine vorhandene Tabelle

Beitrag von anton » So 29. Dez 2024, 16:52

Pit Zyclade hat geschrieben:
Fr 27. Dez 2024, 16:52

Wenn man bereits vorhandene Listen nicht neu schreiben will, sollte man sein Produkt (vielleicht) einfach in die Form einer Konkordanzdatei überführen und die dann verlinken. Dann wäre dein Wunsch erfüllt.
Ich habe mir deine Beispieldatei "Konkordanzdatei-2.sdi" aus meinem Writer-Post angesehen:
#Suchbegriff;Registereintrag;1. Schl�ssel;2. Schl�ssel;Gro�/Klein;ganzes Wort
Knapp;Knapp Knappe;Person;;1;1
knecht;Knecht;Person;Hauptperson;0;0
Becher;;Gegenstand;;1;0
J�ngling;;Person;Hauptperson;1;0
K�nig;;Person;Hauptperson;1;1
Ring;;Gegenstand;;1;1
Ritter;;Person;;1;1
Wer wagt es;;Frage;;1;0
Knappen;Knapp Knappe;Person;;0;1
Was du sahst auf des Meeres tiefunterstem Grunde;;Frage;;1;0
Wie ist diese Datei entstanden? Durch händische Einträge - Klicken, Kopieren, Löschen usw. - oder wie?

Kannst du mir ein Beispiel mit einer kleinen writer Tabelle mit drei Spalten (Nr; Name; Bezeichnung) und fünf Tabellenzeilen mit beliebigen Einträgen zeigen, wie ich daraus eine Konkordanzdatei erzeuge ?

Pit Zyclade
* LO-Experte *
Beiträge: 3041
Registriert: Mo 12. Nov 2012, 16:59

Re: Stichwortverzeichnis / Register über eine vorhandene Tabelle

Beitrag von Pit Zyclade » So 29. Dez 2024, 19:23

anton hat geschrieben:
So 29. Dez 2024, 16:52

Konkordanzdatei.sdi:
#Suchbegriff;Registereintrag;1. Schl�ssel;2. Schl�ssel;Gro�/Klein;ganzes Wort

Wie ist diese Datei entstanden? Durch händische Einträge - Klicken, Kopieren, Löschen usw. - oder wie?

Kannst du mir ein Beispiel mit einer kleinen writer Tabelle mit drei Spalten (Nr; Name; Bezeichnung) und fünf Tabellenzeilen mit beliebigen Einträgen zeigen, wie ich daraus eine Konkordanzdatei erzeuge ?
Du hast meine wiederholte Frage nicht beantwortet: Wie stellst du dir den Suchbegriff, der dann automatisch bei jedem Vorkommen im Text im "Stichwortregister" aufgeführt werden soll, vor?
Soll das eine Verbindung aus dem Inhalt der drei Spalten (je Zeile) deiner Tabelle sein?
ODER
Sollen das Einzeldaten aus jeder Spalte sein?
ODER
Sollen das nur Daten aus einer Spalte (z.B. der ersten) sein und die Daten der nächsten Spalte sollen dann Unterbegriffe sein?

Wenn darüber Klarheit besteht, dann geht es weiter.

Was die Konkordanzdatei machen kann, ist dass sie eine Sammlung von einzelnen Suchbegriffen darstellt, Zeile für Zeile ein Suchbegriff. Die Zeilen müssen gar nicht sortiert sein. Was die weiteren "Zutaten" jeder Zeile bewirken, wurde an meinem Gedichtbeispiel offensichtlich.
LO 24.8.7.2 (X86_64) / Windows 11 64bit
Problem gelöst? Dann bitte im Betreff der ersten Nachricht [gelöst] voranstellen.

F3K Total
* LO-Experte *
Beiträge: 2501
Registriert: So 10. Apr 2011, 10:10

Re: Stichwortverzeichnis / Register über eine vorhandene Tabelle

Beitrag von F3K Total » Mo 30. Dez 2024, 13:31

Moin,
da du ja nun unbedingt die folgenden Fragen beantwortet haben möchtest, habe ich dir eine Beispieldatei mit drei dreispaltigen Tabellen gebastelt, deren einzelne Zellen per Schleifen durchlaufen werden.
anton hat geschrieben:
Fr 27. Dez 2024, 14:36
... damit ich sie besser per Programm erschließen kann, da lerne ich lieber etwas über die Möglichkeiten von Makros in Writer-Tabellen.
Um mir einen Eindruck zu verschaffen:
  • Wie spreche ich eine Writer-Tabelle mit einem Makro an?
  • Wie sind die Spalten anzusprechen und auszulesen?
  • Kann ich einzelne Zeilen in einem Tabellenfeld auslesen?...
Das Makro habe ich entsprechend kommentiert, so dass du dir damit alle deine o.a. Fragen selbst beantworten kannst.
Der Code sieht so aus:

Code: Alles auswählen

REM  *****  BASIC  *****

Sub Analyse_Table
    oTables = ThisComponent.TextTables ' alle Tabellen der Writer Datei ansprechen
    nTablesCount = oTables.Count ' Anzahl der Tabellen auslesen
    nCounter = 0 'Laufenden Zellzähler auf Null setzen
    for i = 0 to nTablesCount - 1 'Schleife über alle Tabellen der Writer Datei
        oTable = oTables (i)'Aktuelle Tabelle wählen
        sTableName = oTable.Name 'Namen der aktuellen Tabelle auslesen
        msgbox ("Jetzt durchlaufen wir die Zellen der " & sTableName,64,"Analyse der " & sTableName)
        nColumns = oTable.Columns.Count ' Anzahl der Spalten der aktuellen Tabelle ermitteln
        nRows = oTable.Rows.Count ' Anzahl der Zeilen der aktuellen Tabelle ermitteln
        for j = 0 to nColumns - 1 'Schleife über alle Spalten der aktuellen Tabelle 
            for k = 0 to nRows - 1 'Schleife über alle Zeilen der aktuellen Tabelle 
                oCell = oTable.getCellbyposition(j,k) 'hier wir die Zelle über ihre Koordinaten (x,y) in der Tabelle angesprochen -> A1 = 0,0 | A2 = 0,1 | B2 = 1,1
                nCounter = nCounter + 1 'Zellzähler um 1 erhöhen
                sCellname =  oCell.CellName 'Namen der Zelle auslesen
                sCellString = oCell.String ' Text in der Zelle auslesen
                if sCellString = "" then 'feststellen ob der Text leer ist
                        sMsgboxText = "Die Zelle " & sCellname & " enthält keinen Text"
                    else
                        sMsgboxText = "In der Zelle steht der Text:" & chr(13) &  chr(13) & sCellString
                endif
                msgbox ("Die Zelle " & sCellname & " hat die Koordinaten x = " & j & " | y = "  & k & chr(13) &  sMsgboxText,64,"Analyse der Zelle " & sCellname & " auf Tabelle " & sTableName )
                if instr(sCellString,chr(13)) > 0 then 'Feststellen ob der Text Zeilenumbrüche enthält, wenn ja Analyse der Zeilen abfragen
                     if msgbox ("Sollen die einzelnen Zeilen analysiert werden?",36,"Der Text in der Zelle enthält mehr als eine Zeile") = 6 then
                         aCellString = split(sCellString,chr(13) & chr(10)) 'Hier wird der mehrzeilige Text in einzelne Elemente aufgebrochen und in ein Array geschrieben
                         for l = 0 to ubound (aCellString)
                              msgbox ("Zeile " & (l+1) & ": " & aCellString (l),64,"Analyse der Zeilen in der Zelle")' einzelne Zeilen ausgeben
                         next l   
                    endif
                endif
            next k
        next j
    next i
    msgbox ("Alle " & nCounter & " Zellen der " & nTablesCount & " Tabellen wurden durchlaufen.",64,"Fertig!")
End Sub
Viel Erfolg, auch wenn ich nicht glaube, dass du damit weiter kommst.
Die Datei, mit laufendem Makro findest du angehängt.
Nützliche Tipps zum Zugriff auf Text Tabellen im Writer findest du auch bei Dannenhöfer


Gruß R
Dateianhänge
Tabellenmakro.odt
(30.82 KiB) 153-mal heruntergeladen
Windows 11: AOO, LO Linux Mint: AOO, LO

Pit Zyclade
* LO-Experte *
Beiträge: 3041
Registriert: Mo 12. Nov 2012, 16:59

Re: Stichwortverzeichnis / Register über eine vorhandene Tabelle

Beitrag von Pit Zyclade » Di 31. Dez 2024, 09:54

anton hat geschrieben:
So 29. Dez 2024, 16:52
Kannst du mir ein Beispiel mit einer kleinen writer Tabelle mit drei Spalten (Nr; Name; Bezeichnung) und fünf Tabellenzeilen mit beliebigen Einträgen zeigen, wie ich daraus eine Konkordanzdatei erzeuge ?
Umgekehrt wird ein Schuh daraus! Kopiere mal 5 deiner Tabellenzeilen und markiere mal fett, welcher Teil einen Eintrag im "Stichwortverzeichnis" werden soll. Und dann versuche mal zu beschreiben, welche hierarchische Ordnung deine Einträge haben sollen.

Vielleicht können wir dann helfen, wie man da vorgehen könnte.
LO 24.8.7.2 (X86_64) / Windows 11 64bit
Problem gelöst? Dann bitte im Betreff der ersten Nachricht [gelöst] voranstellen.


An alle, die das LibreOffice-Forum gern nutzen und unterstützen wollen:


Bitte helfen Sie uns mit 7 Euro pro Monat.
Durch Ihren Beitrag tragen Sie dazu bei, unsere laufenden Kosten für die kommenden Monate zu decken.
Unkompliziert per Kreditkarte oder PayPal.
Als ein kleines Dankeschön werden Sie im LO-Forum als SUPPORTER gekennzeichnet.



Antworten