Formeln in eine CSV-Datei schreiben

  • Guten Morgen

    Um Daten später im Tabellenkalkulationsprogramm zu bearbeiten, schreibe ich sie - mit FileWriteLine - in eine csv-Datei.
    Da wäre es manchmal praktisch, wenn man auch gleich Formeln mit reinschreiben könnte - Beispiel =WENN(A1=B1;"Ja";"Nein").
    FileWriteLine verlangt aber Strings - also "=WENN(A1=B1;"Ja";"Nein")" => ergibt verschachtelten Text.
    Dieses Problem läßt sich anscheinend mit Hochkommas lösen - '=WENN(A1=B1;"Ja";"Nein")'.

    Allerdings ist dann in der geöffneten Tabelle die Zelle als Text formatiert und nach der Änderung auf Standard steht da '=WENN(A1=B1;"Ja";"Nein") drin (mit führendem Hochkomma).
    Kennt jemand eine Möglichkeit, die Formel ohne das führende Hochkomma in eine Standard-Zelle zu bekommen?
    Ich verwende LibreOffice-Calc, aber Lösungen für Excel könnten ev. auch funktionieren.

    Danke und SG
    entsel

    Schöne Grüße,
    entsel
    AutoLisp(eln) geht ganz gut, aber AutoIt nur mit Dictionary. 
    Das Problem - man sollte wissen, welche Vokabel man sucht.

  • Musashi 20. Mai 2025 um 08:03

    Hat den Titel des Themas von „Formeln in eine DSV-Datei schreiben“ zu „Formeln in eine CSV-Datei schreiben“ geändert.
  • entsel Das liegt im übrigen auch dadran, das Excel alles in einer csv Datei als Daten/"Text" ansieht und nicht als Formeln betrachtet (Tipp: Speichere mal eine Excel Tabelle mit Formeln als csv und schau dir das Ergebnis an, du wirst dort keine Formeln etc. finden ;) )

    Daher ist der Hinweis von gmmg hier schon ganz richtig auf die entsprechenden au3 für Excel oder Libre.

    Alternativ, erfordert aber einiges an Einarbeitung, benenn mal eine Excel Dateiendung von .xls(x) in .zip um (ich empfehle eine Datei zu nehmen, die du dir schon mal als Beispiel/Template zurecht legst) und öffne sie.
    Dann siehst du die Struktur der Datei und wo du was ablegen musst.
    Im Prinzip liegen die Daten und ihr Aufbau in einer xml Datei (z.B. xl/worksheets/sheet1.xml), die du durchaus verändern/generieren könntest und am Ende mit den anderen Dateien wieder zippen und in xlsx umbennen könntest.
    Das ganze habe ich persönlich jedoch noch nie probiert, sondern immer mit der Excel au3 gearbeitet, da dabei immer ein gewisses Risiko besteht bzgl. Kompatiblität, fehlerhaften Daten/Aufbau, fehlende Verweise in den anderen Dateien in der ZIP etc.

  • Hi zusammen, hi entsel 👋 ,

    ich schließe mich den Vorschlägen an und empfehle direkt in Excel mit AutoIt zu schreiben (falls es um Excel geht).

    Alternativ funktioniert es aber auch wenn du die CSV in Excel importiert hast, wenn du die als Text angezeigte Formelspalte als "Standard" einstellst und mit F9 die Formeln des Blattes neuberechnen lässt. Damit werden die Formeln angewandt.

    Code:

    Ergebnis:

    💡 Die CSV-Daten sind KI generiert (dummy values), aber als Beispiel reicht es.

    Um dir aber den kleinen manuellen Aufwand zu sparen, solltest du dir die Variante in Excel zu schreiben (via AutoIt) genauer anschauen.

    Viele Grüße
    Sven

  • Interessant SOLVE-SMART, sehe zum ersten mal das das geht über die CSV :rock:
    Das muss ich mir auch erst mal anschauen :klatschen:

    Bei mir bleibt es Text (1 Beispiel die CSV direkt geöffnet, 1 mit "Daten aus CSV"):

    Erst wenn man im 2. Beispiel hinter die Formeln klickt und mit Enter bestätigt, führt er die Berechnung aus.
    Sie sind bereits als "Standard" deklariert und F9 hat keine Auswirkung, Schade.


    Ich bleibe dabei das am besten über die .au3 Dateien zu lösen.

    Einmal editiert, zuletzt von Moombas (20. Mai 2025 um 10:50)

  • Ich bleibe dabei das am besten über die .au3 Dateien zu lösen.

    Ja würde ich auch, war einfach nur als Beispiel gedacht, dass dies auch geht.

    Bei mir bleibt es Text [...] Sie sind bereits als "Standard" deklariert und F9 hat keine Auswirkung, Schade.

    Spannend, ich konnte einfach die CSV in Excel importieren "Aus Text/CSV" und dann F9 und fertig.

    Ich nutze "Microsoft Office Professionell Plus 2019", vielleicht gibt es da Funktionsunterschiede in den Versionen von Excel bzw. Office.
    Ich versuche jegliche Office Produkte zu vermeiden, wenn nur möglich, doch arbeitstechnisch ist es nicht immer möglich 😅 .

    Naja, am Ende wie so oft: "Alle Wege führen nach Rom."

    Viele Grüße
    Sven

  • Ja würde ich auch, war einfach nur als Beispiel gedacht, dass dies auch geht.

    Spannend, ich konnte einfach die CSV in Excel importieren "Aus Text/CSV" und dann F9 und fertig.

    Ich nutze "Microsoft Office Professionell Plus 2019", vielleicht gibt es da Funktionsunterschiede in den Versionen von Excel bzw. Office.
    Ich versuche jegliche Office Produkte zu vermeiden, wenn nur möglich, doch arbeitstechnisch ist es nicht immer möglich 😅 .

    Naja, am Ende wie so oft: "Alle Wege führen nach Rom."

    Viele Grüße
    Sven

    Hier ist M365 im Einsatz und ich habe das exakt so gemacht wie du es hier beschreibst ;)

    Aber dennoch interessant das esje nach Version zu klappen scheint.

  • Hallo allerseits

    Danke mal für die vielen Antworten.

    Scheint doch nicht so einfach wie erhofft - spezielle Formatierung bei FileWriteLine oder ähnliches.
    Excel hab ich erwähnt, weil Calc vielleicht doch nicht jeder kennt und eine mögliche Lösung für Excel auch bei Calc funktionieren könnte - hab ich halt gehofft.

    Also ich hab kein Excel, nur Calc - hab daher hier - https://github.com/mlipok/Au3LibreOffice - auf [<> Code] geklickt und die Au3LibreOffice-main.zip heruntergeladen - und bin überfordert.;) Soviel ich weiß müßte man wohl eine von den ~30(?) *.au3-Dateien "includen", aber welche? Und in der sollte ich dann eine Funktion - ??? WriteLineCalc ??? ;) -finden, um *.ods-Dateien zu erstellen bzw. zu befüllen?

    Das Umformatieren der Formelspalte auf Standard und das Entfernen der Hochkommas führt auch bei Calc zum Ziel.
    Aber Dein Code, SOLVE-SMART, ist "zu hoch" für mich. Ich versuch nur mehr alle paar Jahre eine Kleinigkeit und vergesse seit 10 Jahren das wenige, was ich mir mal als Autodidakt angelesen habe. ;)

    Schöne Grüße,
    entsel
    AutoLisp(eln) geht ganz gut, aber AutoIt nur mit Dictionary. 
    Das Problem - man sollte wissen, welche Vokabel man sucht.

  • Um mit Calc zu arbeiten mußt Du nur die LibreOfficeCalc.au3 (die UDF selbst) in Dein Skript per #include einbinden.
    Alle anderen Dateien sind Beispiele. Das siehst Du auch daran, dass LibreOfficeCalc.au3 gleich zu Beginn eingebunden wird.
    Da die UDF die gesammelten Funktionen enthält, ist sie meist auch die größte Datei.

  • nur die LibreOfficeCalc.au3 (die UDF selbst) in Dein Skript per #include einbinden

    Sehr gut water 👌 . Ich wusste nicht ob er Excel nimmt oder nicht, aber gut das Calc in der UDF abgedeckt ist.

    Aber Dein Code, SOLVE-SMART, ist "zu hoch" für mich. Ich versuch nur mehr alle paar Jahre eine Kleinigkeit und vergesse seit 10 Jahren das wenige, was ich mir mal als Autodidakt angelesen habe. ;)

    entsel, du meinst meinen Code aus Post #4? Ah okay. Ist nicht mehr als ein Funktionsaufruf und ein wenig Text in eine Datei schreiben. Falls du Basics auffrischen möchtest/musst/willst, wirst du hier im Forum auch fündig. Viele tolle Tutorials und ähnliches was dir hilft dich durch die vorgeschlagene UDF zu hangeln.

    Viel Erfolg und viele Grüße
    Sven

  • Geht evtl. auch eine xlsx-Datei als Ausgabe?
    Ich hab mir mal Gedanken gemacht wie man Funktionen dort mit hinein bringt und hab mal eine entsprechende Testversion der xlsxNative.au3 hier in den Anhang gelegt.

    Damit würde man eine xlsx-Datei inklusive Funktionszellen so erzeugen können:

    Das ganze ist erst einmal ein Test und noch nicht in der offiziellen Version, da ich noch überlege wie ich die Strings am besten als Funktionen markiere.
    Aktuell mache ich es über vorangestellte bestimmte Steuerzeichen.

    Könnt ja mal testen und eure Hinweise dazu geben.

    2 Mal editiert, zuletzt von AspirinJunkie (21. Mai 2025 um 06:37) aus folgendem Grund: Edit: Umgestellt auf "=" als Erkennung ob String eine Funktion darstellen soll.

  • Das ganze ist erst einmal ein Test und noch nicht in der offiziellen Version, da ich noch überlege wie ich die Strings am besten als Funktionen markiere

    Vielleicht verstehe ich dich falsch AspirinJunkie, doch in Excel, Calc und Co. werden Formeln doch mit "=" eingeleitet, also bspw. "=WENN(...".
    Wenn du nun also dies als Indikator für Formeln nutzt, hast du es doch oder 🤔 ? Du meinst wahrscheinlich wie du der xlsx mitgibst das Spalte 1 strings sind, das Spalte 3 und 4 ein Datumstyp ist usw.? Falls ja, ich würde alles auf "Standard"/("Allgemein"), je nachdem wie es bezeichnet wird, stellen wenn möglich. Dann sollte das Programm was die xlsx Datei nutzt, selbst die Felder interpretierern und als Formel, Text, Uhrzeit etc. einstufen.

    Falls ich am Thema vorbei denke 😅 , ... dann liegt es an einem seeeeehhhhrrrr langen Tag den ich heute hatte.

    Viele Grüße
    Sven

  • Ja dass meine ich ja mit noch im Test. An das = am Anfang habe ich auch gedacht aber es könnte ja auch Strings geben die damit anfangen. Die würde man dann damit killen. Könnte man andersherum angehen indem man das = für diesen Fall escaped.

    Dazu kommt, dass man in der xlsx den Datentyp der Zelle - also den Rückgabetyp der Funktion - angeben muss (wobei: ich weiß gar nicht wirklich ob man das wirklich muss...). Daher braucht es da noch eine weitere Markierung.

    Also ja: Mag sein, dass das = doch die beste Variante ist. Da lasse ich noch ein paar Tage die Gedanken dazu reifen.

  • Alles klar, verstehe.

    Ich muss ja zugeben beim weiteren darüber nachdenken, dass der Anwendungsfall doch recht speziell ist. Ich meine wenn ich die Daten per AutoIt vorliegen habe, kann ich auch dort direkt die Kalkulationen vornehmen und die fertigen (berechneten) Daten dann als CSV, xlsx etc. speichern. Kein Grund Formeln der Tabellenkalkulation zu nutzen.

    Wobei klar, wenn man die Daten in Excel/Calc wieder ändert, wären Formeln dort schon sinnvoll. Doch zugegebenermaßen kenne ich niemand, außer "entsel" jetzt, der Excel/Calc nutzt und vorher programmatisch die Daten so aufbereitet/aufbereiten möchte. Ihr merkt, ich denke einfach gerade nur laut 😅 .

    Egal. Halte uns gern mal auf dem Laufenden AspirinJunkie wie du dich entscheidest, falls du es umsetzt. Würde mich einfach interessieren zu sehen wie es wird.

    Viele Grüße
    Sven

  • Ich muss ja zugeben beim weiteren darüber nachdenken, dass der Anwendungsfall doch recht speziell ist. Ich meine wenn ich die Daten per AutoIt vorliegen habe, kann ich auch dort direkt die Kalkulationen vornehmen und die fertigen (berechneten) Daten dann als CSV, xlsx etc. speichern. Kein Grund Formeln der Tabellenkalkulation zu nutzen.

    Den Gedanken hatte ich auch schon aber ich gehe davon aus das entsel hier eine Exceldatei erstellen will, die dann später von anderen weiterbearbeitet wird.
    Ansonsten bin ich da ganz bei dir ;)

    Und entsel, ggf. versuchst du mal mit dem neuen Wissen (welche au3 du einbinden musst etc.) einfach mal ein Beispiel zu bauen wie weit du kommst, ggf. mit Beispieldaten und dann schauen wir wo wir dir noch weiter helfen können/müssen.

  • Danke für die vielen Antworten.

    water

    Die LibreOfficeCalc.au3 hat bei mir nur 2.348 KB, aber in ihr werden 13 weitere *.au3 eingebunden.
    Werd dann mal schauen, ob ich da entsprechende Funktion(en) finde?

    SOLVE-SMART

    Zitat

    ... Code aus Post #4?

    Genau!

    Zitat

    ... Basics auffrischen ...

    Früher hab ich Autoit beruflich nutzen können, jetzt nur mehr privat - wenn es sich grad aufdrängt oder auch nur aus Neugier - wie jetzt.
    zu post #14: Ob Ausgabe/Speicherung/Weiterverarbeitung mit Autoit oder Calc? Kommt eventuell drauf an, was einfacher ist ;) Ausgabe => Calc wäre der Weg, wenn man die Daten sehen/analysieren/ oder weiter verarbeiten will (#15).

    AspirinJunkie

    Zitat

    Geht evtl. auch eine xlsx-Datei als Ausgabe?

    Grundsätzlich ja - wenn das Ziel Priorität hat - weil man mit Calc auch xlsx-Dateien öffnen könnte.
    In meinem Fall interessiert mich aber auch, ob es einen einfachen Weg "über die Berge gibt, den man ohne Alpinausbildung" ;) schaffen kann.

    Moombas

    Ich zerlege mein angedachtes Projekt erstmal in kleine Teilabschnitte, die im Erfolgsfall dann zusammengesetzt werden - meine Teil-Test.au3 sieht bis jetzt noch so aus:

    AutoIt
    #include <LibreOfficeCalc.au3>
    $File = FileOpen("e:\1.ods", 10)
    FileWriteLine($file, "fhdf" & ":" & "joht" & ":" & "wearsöä" & ":" & '=WENN(A1=B1;"Ja";"Nein")' & @CRLF)
    FileClose($file)

    womit ich ich Zeile 3 ersetzen könnte bin ich noch am erkunden ...

    Schöne Grüße,
    entsel
    AutoLisp(eln) geht ganz gut, aber AutoIt nur mit Dictionary. 
    Das Problem - man sollte wissen, welche Vokabel man sucht.

    Einmal editiert, zuletzt von SOLVE-SMART (21. Mai 2025 um 11:46)

  • Ich zerlege mein angedachtes Projekt erstmal in kleine Teilabschnitte, die im Erfolgsfall dann zusammengesetzt werden - meine Teil-Test.au3 sieht bis jetzt noch so aus

    Nur ein paar kleine Verbesserungen und Anmerkungen zu deinem Codebeispiel. Folgender Code (kleine Anpassungen):

    AutoIt
    #include-once
    #include <LibreOfficeCalc.au3>
    
    Global $sFile         = FileOpen('e:\1.ods', 10) ; create and write mode
    Global $sFirstCSVLine = 'fhdf,joht,wearsöä,=WENN(A1=B1;"Ja";"Nein")'
    
    FileWriteLine($sFile, $sFirstCSVLine & @CRLF)
    FileClose($sFile)
    1. Ich habe die ":" durch "," ersetzt, da dies ein CSV Standard (Trenner)Zeichen ist. Du kannst auch ";" oder "|" nutzen, doch dann musst du es beim importieren angeben. Dein Doppelpunkt ist sehr unüblich, daher würde ich davon abraten.
    2. Ich habe deine Formel ohne einfaches Hochkomma (') (single quote) abgeändert. Also alle Strings sind nun mit single quote ' und die Formeln können dann ganz einfach " (quotes) benutzen.

    Tipp:
    Umso mehr du uns Kontext gibst, Daten gibst etc., umso besser können wir beraten bzw. Vorschläge machen ob CSV überhaupt eine gute Idee ist oder ob du ganz anders vorgehen könntest etc.

    Einen angenehmen Tag dir entsel und allen Mitlesenden 🌞 .

    Viele Grüße
    Sven

    PS.: Zum Auffrischen der Basics kannst du dir gern auch mein AutoIt Cheat Sheet anschauen. Steht ansonsten auch in meiner Signatur.

  • Die LibreOfficeCalc.au3 hat bei mir nur 2.348 KB, aber in ihr werden 13 weitere *.au3 eingebunden.

    Korrekt, aber die gehören alle zu LibreOffice Calc.
    Ich schlage einen Blick in die Doku vor - die Zahl an Funktionen ist riesig, ohne Doku verliert man schnell den Überblick ;)

  • Danke wieder für die weiteren Kommentare

    SOLVE-SMART

    Zitat

    "... CSV ... oder anders ..."

    In der Zwischenzeit hab ich einige weitere "Teil-Tests" gemacht und der weitere Weg in Autoit wäre jetzt auch eine Option, auch wenn der Weg über CALC erst der einfachere schien und ich die Daten dort beliebig filtern, sortieren etc. könnte (was aber nur eine Draufgabe wäre).

    Danke auch für die Codeverbesserungen. Ja, mein Code ist rudimentär - weils halt nur ein Test-Schnipsel ist.
    Aber die Doppelpunkte hatten sogar einen Sinn;) - in Falle von Dateipfaden, würden die beim Einlesen gleich zerlegt (Text in Spalten => LW, Pfad)
    Aber Deine Zeile 5 schaut gleich besser aus, als meine Zeile 3.

    Deinen Cheat Sheet hab ich mir abgespeichert - danke dafür. Beim nächsten Projekt - in einigen Jahren(?) ;) - hab ich eh wieder alles vergessen und muss mich wieder neu einlesen.

    Noch ein Feedback zu #include <LibreOfficeCalc.au3> - wenn ich die einbinde krieg ich eine Fehlermeldung beim Ausführen:
    ...LibreOfficeCalc_Field.au3"(68,22) : error: : undefined function
    Dieses IsMap() kommt zwar in mehreren *.au3's vor, aber ein "Func IsMap()" hab ich nirgends gefunden.
    Liegt's an mir oder kann die Funktionsdefinition tatsächlich fehlen?

    Schöne Grüße,
    entsel
    AutoLisp(eln) geht ganz gut, aber AutoIt nur mit Dictionary. 
    Das Problem - man sollte wissen, welche Vokabel man sucht.

  • Du scheinst eine ältere Version von AutoIt zu benutzen. Falls möglich, installiere die aktuelle Version. Dann sollte das Problem behoben sein :)