🙏 Helfen Sie jetzt mit, unser LibreOffice Forum zu erhalten! 🙏
Mit Ihrer Spende sichern Sie den Fortbestand, den Ausbau und die laufenden Kosten dieses Forums. 🌱

🍀 Jeder Beitrag zählt – vielen Dank für Ihre Unterstützung!🍀

❤️ 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. 🤗

ini-Datei einlesen - wie vorgehen?

Alles zur Programmierung im LibreOffice.
Antworten
SvenKo
Beiträge: 16
Registriert: Mo 21. Dez 2015, 23:18

ini-Datei einlesen - wie vorgehen?

Beitrag von SvenKo » Fr 22. Jan 2016, 22:19

Hallo

Ich möchte in einer Tabelle mit mehreren Tabellenblättern Werte aus einer ini-Datei einlesen und später auch wieder in die ini-Datei schreiben.
Auf der Suche nach einem passenden Ansatz habe ich die readini und writeini Funktionen von Dannenhöfer gefunden. Und auch ein relativ gutes Beispiel für die grundsätzliche Anwendung der readini-Funktion.
Da ich aber die komplette ini-Datei einlesen muss und die Werte automatisch in den Tabellenblättern den richtigen Feldern zugeordnet werden müssen, ist mir aber noch nicht ganz klar, wie man am besten an die Sache rangeht. Es erscheint mir sehr sinnfrei jede Tabellenzeile anzuspringen und z.B. Feld X auszulesen um mir dann aus der ini-Datei nur den Wert für dieses eine Feld zu holen.
Da in der zukünftigen Tabelle durchaus bis zu 200 Felder mit zugehörigen Werten pro Tabellenblatt vorhanden sein können, wären das ziemlich viele readini-Aufrufe.
Das geht doch bestimmt auch einfacher.

Worüber muss ich mich informieren, um zumindest in einer guten Richtung zu einem Ergebnis zu kommen?


Beispieldateien anbei.
(Da man hier keine reinen *.ini-Dateien anhängen kann, musste ich die ini-Datei umbenennen in "test.ini.ods". D.h. das ".ods" kann einfach entfernt werden.)

LOo 5.0.4.2

Sven
Dateianhänge
test.ini.ods
(312 Bytes) 268-mal heruntergeladen
test.ods
(8.5 KiB) 274-mal heruntergeladen
SvenKo

Benutzeravatar
karolus
* LO-Experte *
Beiträge: 2536
Registriert: Fr 10. Dez 2010, 10:01

Re: ini-Datei einlesen - wie vorgehen?

Beitrag von karolus » Mo 25. Jan 2016, 18:30

Hallo

Wenn du nicht gerade darauf bestehst das mit vor-sintflutlichem BASIC zu lösen, gehts relativ einfach.

Python hat sogar ein Modul zum lesen und schreiben von .ini Dateien.

Code: Alles auswählen

try:
    from  configparser import ConfigParser #py3
except:
    from ConfigParser import SaveConfigParser as ConfigParser #py2

def read_ini(filepath):
    config = ConfigParser(default_section='')    
    with open(filepath) as f:
        config.read_file(f)
    return config.items()

def import_ini():
    doc = XSCRIPTCONTEXT.getDocument()
    sheets = doc.Sheets
    for key, value in read_ini('test.ini'):
        try:
            sheet = sheets.getByName( key )
            out = tuple(value.items())
            outrange = sheet.getCellRangeByPosition(0,1,1,len(out))
            outrange.setFormulaArray(out)
        except:
            pass

def export_ini():
    config = ConfigParser(default_section='')
    doc = XSCRIPTCONTEXT.getDocument()
    sheets = doc.Sheets
    for sheetname in sheets.ElementNames:
        sheet = sheets.getByName(sheetname)
        sourcerange = sheet.getCellRangeByName('A2:B10000')
        cursor = sheet.createCursorByRange(sourcerange)
        cursor.gotoEndOfUsedArea(1)
        config.add_section(sheetname)
        for key, value in cursor.FormulaArray:
            config.set(sheetname, key, value)
    with open('new_config.ini', 'w')as f:
        config.write(f)
Aktuell liest die `import_ini` aus der Datei "test.ini" und `export_ini` schreibt nach "new_config.ini" jeweils im aktuellen Arbeitsverzeichniss.( kann man noch verändern, oder mit Dateiauswahl-dialog verfeinern.)
test_mit_python.ods
(11.38 KiB) 284-mal heruntergeladen
Karolus
LO7.4.7.5 debian 12(bookworm) auf Raspberry4b 8GB (64bit)
LO24.8.0.3 flatpak debian 12(bookworm) auf Raspberry4b 8GB (64bit)

Makromador
Beiträge: 10
Registriert: Fr 18. Dez 2015, 13:01
Kontaktdaten:

Re: ini-Datei einlesen - wie vorgehen?

Beitrag von Makromador » Mo 25. Jan 2016, 22:57

Hallo,

eine kleine Hilfestellung findet sich hier: https://makromador.wordpress.com/implementierung/

Das könnte Dir evtl. weiterhelfen.

Grüße

Makromador

Benutzeravatar
karolus
* LO-Experte *
Beiträge: 2536
Registriert: Fr 10. Dez 2010, 10:01

Re: ini-Datei einlesen - wie vorgehen?

Beitrag von karolus » Di 26. Jan 2016, 01:07

Super -- ganz grosses Kino! :roll:

Nachdem ich mich über eine halbe Stunde durch deine 100 Zeilen kruden Code gelesen habe -- hier ist das Gegenstück in Python in fünf lesbaren Zeilen:

Code: Alles auswählen

from  configparser import ConfigParser

def read_single_value(spath, section, key):
    config = ConfigParser( )
    config.read(spath)
    return config.get(section, key)
    
 
LO7.4.7.5 debian 12(bookworm) auf Raspberry4b 8GB (64bit)
LO24.8.0.3 flatpak debian 12(bookworm) auf Raspberry4b 8GB (64bit)

SvenKo
Beiträge: 16
Registriert: Mo 21. Dez 2015, 23:18

Re: ini-Datei einlesen - wie vorgehen?

Beitrag von SvenKo » Di 26. Jan 2016, 23:51

@Karolus
Es muss nicht unbedingt BASIC sein. Mit Python habe ich mich bisher noch nie befasst - ich werde das als Herausforderung ansehen und dies nun nachholen.
Hmm ... es scheitert schon am einfachen Aufrufen und Bearbeiten des Scriptes ... Aha! "libreoffice-script-provider-python" fehlte in meiner Installation.
Das Exportieren in die ini-Datei funktioniert nun schon mal testweise.

Dann werd ich mal fleißig $Suchmaschine bemühen für alles weitere :D

Danke ersteinmal für den hervoragenden Ansatz.



@ Makromador
Das entspricht im wesentlichen Grundprinzip dem BASIC-Script von Dannenhöfer bzw. dem von mir bereits erwähnten Beispiel.
Einzelne / Zeilenweise Abfragen sind nicht sinnvoll in meinem Fall.
SvenKo


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