BITTE helfen Sie uns HEUTE mit einer SPENDE
Helfen Sie das LibreOffice Forum zu erhalten!

❤️ DANKE >><< DANKE ❤️

> KEINE WERBUNG FÜR REGISTRIERTE BENUTZER!<
Ihre Spende wird für die Deckung der laufenden Kosten sowie den Erhalt und Ausbau 🌱 des LibreOffice Forums verwendet.
🤗 Als Dankeschön werden Sie im Forum als LO-SUPPORTER gekennzeichnet. 🤗

"Technische Dokumentation" anhand aller verwendeten Funktionen?

CALC ist die Tabellenkalkulation, die Sie immer wollten.
hylli
Beiträge: 290
Registriert: Sa 19. Mär 2011, 19:00

"Technische Dokumentation" anhand aller verwendeten Funktionen?

Beitrag von hylli » Di 6. Dez 2022, 14:15

Für eigen erstellte Tabellenkalkulationen, sollen wir technische Dokumentationen erstellen, welche gemäß Definition wohl auch eine Liste aller in Zellen verwendeten Funktionen sein kann.

Natürlich kenne ich die Möglichkeit über Ansicht -> Formel die jeweilige Funktion in einer Zelle anzeigen zu lassen, jedoch bekommt man so je nach Tabelle und länge der Funktion, keine vernünftigen Ausdrucke mehr hin.

Viel besser wäre eine Möglichkeit, als Anlage sämtliche verwendete Funktionen auf den einzelnen Tabellenblättern auszugeben, sozusagen:
Tabellenblatt | Zelle | Funktion

Im Prinzip also vergleichbar mit irgendwelchen Verzeichnissen in Writer, nur eben mit Calc.

Kann man so etwas mit einfachen Mitteln mit LibreOffice Calc bewerkstelligen?

Hylli
Geschäftlich: LibreOffice 7.2.x(als Citrix-Anwendung)
Privat: LibreOffice 7.3.x unter Linux Mint Cinnamon 64bit (jeweils aktuelle Version)

hylli
Beiträge: 290
Registriert: Sa 19. Mär 2011, 19:00

Re: "Technische Dokumentation" anhand aller verwendeten Funktionen?

Beitrag von hylli » Di 6. Dez 2022, 16:20

Vielleicht ergänzend noch folgende Info, auf die ich bei meinen Recherchen gestoßen bin:
https://www.excel-ist-sexy.de/alle-formeln-auflisten/

So etwas (Variante 2 für alle Arbeitsblätter!) würde mir auch vorschweben, jedoch weiß ich nicht, wie man das Makro "übersetzt", so dass es LibreOffice auch versteht?

Hylli
Geschäftlich: LibreOffice 7.2.x(als Citrix-Anwendung)
Privat: LibreOffice 7.3.x unter Linux Mint Cinnamon 64bit (jeweils aktuelle Version)

F3K Total
Beiträge: 2409
Registriert: So 10. Apr 2011, 10:10

Re: "Technische Dokumentation" anhand aller verwendeten Funktionen?

Beitrag von F3K Total » Di 6. Dez 2022, 17:01

Hallo Hylli,
ich habe ein Makro geschrieben.
Lege ein Tabellenblatt mit dem Namen Funktionen an, und führe das folgende Makro aus:

Code: Alles auswählen

sub  show_Used_Functions()
    oController = ThisComponent.CurrentController
    oSheets = ThisComponent.Sheets
    oTargetSheet = oSheets.getbyName("Funktionen")
    oController.activeSheet = oTargetSheet
    nCounter = 1
    for i = 0 to oSheets.count - 1
        oSheet = oSheets(i)
        if not (oSheet.Name = "Funktionen") then
        oCursor = oSheet.CreateCursor
        oCursor.gotoendofusedArea(false)
        nEndcolumn = oCursor.Rangeaddress.Endcolumn
        nEndRow = oCursor.Rangeaddress.EndRow
        for j = 0 to nEndcolumn
            for k = 0 to  nEndRow
                oCell = oSheet.getCellbyPosition(j,k)
                if oCell.Type = com.sun.star.table.CellContentType.FORMULA then 'enthält die Zelle eine Formel?
                    oTargetCellAbsoluteName = oTargetSheet.GetCellByPosition(0,nCounter)
                    oTargetCellFormula = oTargetSheet.GetCellByPosition(1,nCounter)
                    oTargetCellAbsoluteName.String = oCell.AbsoluteName
                    oTargetCellFormula.String = oCell.Formula
                    nCounter = nCounter + 1
                 endif
              next k
          next j
        endif
    next i
End Sub
Dann sollten auf dem Tabellenblatt Funktionen in Spalte A die Adressen aller Formelzellen und in Spalte B die Formeln erscheinen.
Windows 10: AOO, LO Linux Mint: AOO, LO

Benutzeravatar
karolus
Beiträge: 2170
Registriert: Fr 10. Dez 2010, 10:01

Re: "Technische Dokumentation" anhand aller verwendeten Funktionen?

Beitrag von karolus » Di 6. Dez 2022, 17:30

Hallo
Eine Zelle enthält (optional ) eine Formel, in der Formel können dann nur Operatoren auftauchen , und|oder auch FUNKTIONEN in beliebiger Anzahl.
falls du nur die Formel brauchst gibts dafür eine Funktion und die heisst =FORMEL(…)

falls du aber wirklich jede einzelne verwendete Funktion dokumentieren willst wirds wohl etwas schwieriger.
LO7.4.7.2 debian 12(bookworm) auf Raspberry4b 8GB (64bit)
LO7.6.3.2 flatpak debian 12(bookworm) auf Raspberry4b 8GB (64bit)

Benutzeravatar
karolus
Beiträge: 2170
Registriert: Fr 10. Dez 2010, 10:01

Re: "Technische Dokumentation" anhand aller verwendeten Funktionen?

Beitrag von karolus » Di 6. Dez 2022, 17:58

Hallo
@F3k
Der Teil ist ja einfach:
formeln.png
formeln.png (44.61 KiB) 2388 mal betrachtet
Wenns jetzt aber um die einzelnen Funktionen geht, ( alle violetten Namen im Screenshot ) wirds bisserl komplizierter!
LO7.4.7.2 debian 12(bookworm) auf Raspberry4b 8GB (64bit)
LO7.6.3.2 flatpak debian 12(bookworm) auf Raspberry4b 8GB (64bit)

F3K Total
Beiträge: 2409
Registriert: So 10. Apr 2011, 10:10

Re: "Technische Dokumentation" anhand aller verwendeten Funktionen?

Beitrag von F3K Total » Di 6. Dez 2022, 18:40

Hallo Karolus,
Die Sache mit dem queryContentCells ist ja richtig gut!
Und ja, wenn Hylli die einzelnen Funktionen sucht wirds kompliziert.
Bin gespannt.
Gruß R
Windows 10: AOO, LO Linux Mint: AOO, LO

Benutzeravatar
karolus
Beiträge: 2170
Registriert: Fr 10. Dez 2010, 10:01

Re: "Technische Dokumentation" anhand aller verwendeten Funktionen?

Beitrag von karolus » Di 6. Dez 2022, 18:57

Hallo
@screenshot oben: Ich finde es witzig das die Ausgabe von print aus rich schon freiwillig die Funktionsnamen violett präsentiert.
LO7.4.7.2 debian 12(bookworm) auf Raspberry4b 8GB (64bit)
LO7.6.3.2 flatpak debian 12(bookworm) auf Raspberry4b 8GB (64bit)

gogo
Beiträge: 1072
Registriert: Sa 5. Feb 2011, 19:07

Re: "Technische Dokumentation" anhand aller verwendeten Funktionen?

Beitrag von gogo » Di 6. Dez 2022, 20:34

Einzeiler gefällig?:

Code: Alles auswählen

...
sAlleFormeln=""
for cell in formulas.Cells:
	...
	sAlleFormeln += ";" + cell.Formula
print("verwendete Funktionen:" + chr(10) + chr(10).join(set([x[:x.index("(")].replace(" ","") + "()" for x in ";".join(sAlleFormeln.replace('""','').split('"')[::2]).replace("(","(;").replace("=",";").replace("&",";").replace("+",";").replace("-",";").replace("*",";").replace("/",";").split(";") if "(" in x])))
g
2008 LucidL./MaverickM./WinXP LibreOffice 3.3.2 > 02/13 LinuxMint13/Xubuntu > 09/13 Debian Wheezy+LO3.5.4.2 > 01/15 Debian Jessie KDE+LO4.3.3.2/Mint17 openbox auf USB+LO4.2.8.2 > 03/16 ArchLin & LO5.1+ff > 02/18 Kubuntu

gogo
Beiträge: 1072
Registriert: Sa 5. Feb 2011, 19:07

Re: "Technische Dokumentation" anhand aller verwendeten Funktionen?

Beitrag von gogo » Di 6. Dez 2022, 20:36

... oder doch besser so :)

Code: Alles auswählen

...
sAlleFormeln=""
for cell in formulas.Cells:
	...
	sAlleFormeln += ";" + cell.Formula
print(strip_functionnames(sAlleFormeln))


def strip_functionnames(s):
    # lösche alle ""-Strings aus dem Funktionsstring
    s = ";".join(s.replace('""','').split('"')[::2])

    # lösche alle Leerzeichen (steht im Einzeiler weiter hinten)
    s = s.replace(" ","")

    # trenne alle aufeinanderfolgenden Funktionen
    s = s.replace("(","(;")

    # ersetze alle syntaktischen Trenner
    for r in "=,+-*/^<>":
        s = s.replace(r,";")

    #Suche alle Elemente mit einem Funktionsbeginn "("
    l = [x[:x.index("(")] + "()" for x in s.split(";") if "(" in x]

    # entferne doppelte Funktionen und Finish
    return "verwendete Funktionen:" + chr(10) + chr(10).join(set(l))
g
2008 LucidL./MaverickM./WinXP LibreOffice 3.3.2 > 02/13 LinuxMint13/Xubuntu > 09/13 Debian Wheezy+LO3.5.4.2 > 01/15 Debian Jessie KDE+LO4.3.3.2/Mint17 openbox auf USB+LO4.2.8.2 > 03/16 ArchLin & LO5.1+ff > 02/18 Kubuntu

Benutzeravatar
karolus
Beiträge: 2170
Registriert: Fr 10. Dez 2010, 10:01

Re: "Technische Dokumentation" anhand aller verwendeten Funktionen?

Beitrag von karolus » Di 6. Dez 2022, 23:19

Hallo
@gogo: so richtig pythonisch ist das noch nicht, aber deine Methode die literalen Strings zu entfernen ist genial.
in python musst du nicht chr(10) nehmen, dafür gibts escape-sequenzen \n

Code: Alles auswählen

import re

rex= re.compile(r"([A-ZÄÖÜ._0-9]+)\(")

alle = "\n".join(cell.Formula for cell in formulas.Cells)

func_string = "\n".join(f'{entry}()' for entry in sorted(set(rex.findall(alle))))

print(f"verwendete Funktionen:\n{func_string}")
LO7.4.7.2 debian 12(bookworm) auf Raspberry4b 8GB (64bit)
LO7.6.3.2 flatpak debian 12(bookworm) auf Raspberry4b 8GB (64bit)

An alle, die das LibreOffice-Forum nutzen:


Bitte beteiligen Sie sich mit 7 Euro pro Monat und helfen uns bei unserem Budget für das Jahr 2024.
Einfach per Kreditkarte oder PayPal.
Als Dankeschön werden Sie im Forum als LO-SUPPORTER gekennzeichnet.

❤️ Vielen lieben Dank für Ihre Unterstützung ❤️

Antworten