Eine Liste mit Rezepten (Einkaufsliste) für eine Woche mit Makros oder Funktionen zusammen fassen bzw. erstellen.

Das Tabellenkalkulationsprogramm

Moderator: Moderatoren

Clone Borg
Beiträge: 6
Registriert: Mi, 06.03.2019 20:38

Eine Liste mit Rezepten (Einkaufsliste) für eine Woche mit Makros oder Funktionen zusammen fassen bzw. erstellen.

Beitrag von Clone Borg »

Hallo liebe Openoffice und LibreOffice Forumsmitglieder,

folgende Ausgangssituation habe ich:

Mit einer App suche ich mir Rezepte für die ganze Woche aus. Die Zutaten für die Rezepte kann ich in einer Einkaufsliste abspeichern. Diese Einkaufsliste kann ich dann ausdrucken bzw. wird als meinedatei.txt abgespeichert.

Liste (gekürzt).

-------------------------------------------------------------
Geröstetes Kokos-Curry-Hähnchen
Für 1 Portion
Kokosöl (1½ TL, 11 ml)
¼ Zwiebeln (18 g)
1 Knoblauchzehen (3 g)
Currypulver (½ EL, 3 g)
Passierte Tomaten (110 g)
Kokosmilch (50 ml)
Pfeffer und Salz (nach Belieben)
1 Hähnchenbrustfilets (150 g)
½ Limette (34 g)

Fischfrikadellen
Für 1 Portion
Seelachsfilets (100 g)
⅓ Frühlingszwiebeln (7 g)
Petersilie (3 g)
⅓ Eier (23 g)
Pfeffer und Salz (nach Belieben)
Paniermehl (3 g)
Rapsöl (0,17 EL, 2 ml)

Karotten-Kokos-Suppe mit Ingwernote
Für 1 Portion
1 Karotten (150 g)
¼ Apfel (35 g)
¼ Zwiebel (20 g)
Ingwer, geschält (5 g)
Kokosöl (½ TL, 4 ml)
Kokosmilch, fettreduziert (100 ml)
Gemüsebrühe (150 ml)
Currypulver (nach Belieben)
Zimt (nach Belieben)
Pfeffer und Salz (nach Belieben)

Kichererbsen-Kokos-Curry mit Reis
Für 1 Portion
Reis (60 g)
⅓ Zwiebel (27 g)
⅔ Knoblauchzehen (2 g)
Kokosöl (⅓ EL, 5 ml)
Tomaten, stückig (133 g)
Kokosmilch, fettreduziert (83 ml)
Garam Masala (nach Belieben)
Currypulver (1 TL, 2 g)
Kreuzkümmel, gemahlen (⅓ TL, 1 g)
Pfeffer und Salz (nach Belieben)
Chilipulver (nach Belieben)
Kichererbsen, Konserve (133 g)

Protein-Dinkel-Müsli mit Cranberrys
Für 1 Portion
Dinkelflocken (50 g)
Kokosöl (1 TL, 8 ml)
Joghurt, 0,1% Fett (200 g)
Proteinpulver (25 g)
½ Apfel (70 g)
Chia-Samen (5 g)
Zimt (nach Belieben)
Cranberrys (5 g)
Süßstoff (Stevia, Erythrit, o.Ä.) (nach Belieben)

#YAZIO

------------------------------------------------------------------------

Die Liste bearbeite ich zur Zeit in „LibreOffice Calc“, durch löschen, sortieren, etc. manuell. Ihr könnt Euch denken wenn ich für die ganze Woche (Frühstück, Mittagessen und Abendessen) im Voraus plane wird die Liste (7 Tage x 3 = 21 Rezepte) recht groß und unübersichtlich. Jetzt wollte ich
alles gerne automatisieren.

Da ich überhaupt keine Ahnung habe vom programmieren, wollte ich fragen ob das zu schwer für den Anfang ist.

Wie Ihr seht, steht in den ersten beiden Zeilen vor jedem Rezept, der Name sowie die gewählte Personenanzahl. Danach werden die Zutaten aufgeführt, am Ende der Liste sind dann noch 2 Leerzeilen gefolgt vom Namen der App #Yazio. Jede Zutat ist in einer Zelle Spalte A(n)

Folgende Reihenfolge für Bedingungen und Aufgaben, habe ich mir überlegt.

Lade Datei „ meinedatei.txt“ in die Tabelle
Schreibe in Zelle C1 „Zutaten“ und in Zelle D1 „Menge“
Lösche alle Zeilen in Spalte A(n), die keine Klammern haben bis zur Zeile #Yazio
Lösche alle Ziffern die am Anfang jeder Zelle in Spalte A(n) sind bis zur Zeile #Yazio
Kopiere den Text vor der Klammer in Spalte A(n) bis zur Klammer in Spalte C (n)
Kopiere den Wert mit Einheit in der Klammer von Spalte A(n) BEDINGUNG: ist ein Komma in der Klammer so kopiere nur den Wert nach dem Komma, in Spalte D(n).
Erstelle mir eine Pivot-Tabelle zur Berechnung nehme Spalte C und Spalte D

Was haltet Ihr von meiner Überlegung, muss dafür ein aufwendiges Makro geschrieben werden oder reichen da die Funktionen mit Vergleichsoperatoren aus. Wenn ich evtl. noch Bedingungen und Aufgaben vergessen habe sollte, oder was überflüssig ist, wäre ich Euch sehr dankbar wenn Ihr mich darauf aufmerksam machen könntet.

Wäre nett wenn Ihr mir ein paar Ansätze, natürlich auch gerne Lösungen, geben könnt, wie ich so eine Liste ohne großen Aufwand für mein Wocheneinkauf hinbekomme.

Weiß nicht wohin die Frage am besten gestellt wird, deshalb habe ich diese Rubrik gewählt, gerne kann das Thema auch verschoben werden.

Freue mich auf Eure Kommentare

Clone Borg
mikeleb
*******
Beiträge: 1316
Registriert: Fr, 09.12.2011 16:50

Re: Eine Liste mit Rezepten (Einkaufsliste) für eine Woche mit Makros oder Funktionen zusammen fassen bzw. erstellen.

Beitrag von mikeleb »

Hallo,
so ganz simple ist es nicht und als Einstiegsaufgabe schon eine Herausforderung.
Zunächst muss die txt-Datei ausgewählt werden:

Code: Alles auswählen

function FileOpenDialog() as String

Dim ofilepicker as Object
Dim files

	ofilepicker = createUnoService("com.sun.star.ui.dialogs.FilePicker")
	ofilepicker.Title = "txt-Datei wählen"
	ofilepicker.setMultiSelectionMode(False)
    oFilepicker.appendFilter("Alle Dateien", "*.*")
    oFilepicker.appendFilter("txt-Dateien", "*.txt")
    oFilepicker.setCurrentFilter("txt-Dateien")
	oFilepicker.setMultiSelectionMode(False)
	if ofilepicker.execute()=1 then
		files = ofilepicker.getFiles()
		FileOpenDialog = files(0)
	else
		FileOpenDialog=""
	end if

End function
Diese Datei würde ich nun gar nicht in eine Calc-Datei einfügen, sondern sie zeilenweise auslesen. Jede Zeile muss nun analysiert werden, ob sie in die Einkaufsliste aufgenommen wird. Alle Zeilen ohne Klammer entfallen. Sollen Zeilen mit der Mengenangabe "nach Belieben" auch entfallen? (ich habe mal ja angenommen).
Bei der Bezeichnung der Zutaten sollen führenden Zahlenangaben entfallen. Dazu dient die folgenden Funktion:

Code: Alles auswählen

function zahl_entfernen(sZutat)
	sZeichen=left(sZutat,1)
	if instr("0123456789,¼½¾ ",sZeichen)>0 or asc(sZeichen)>8527 and asc(sZeichen)<8543 then
		sZutat=zahl_entfernen(mid(sZutat,2))
	end if
	zahl_entfernen=sZutat
end function
Ich gehe mal davon aus, dass du auch die Bruchteilangaben entfernt haben möchtest (da gibt es je nach Zeichensatz einige).
Für das Rechnen (per Pivotabelle) ist es meiner Meinung nach notwendig, Mengenangabe und Einheit voneinander zu trennen. Daher muss der letzte Eintrag in der letzten Klammer noch am Leerzeichen getrennt werden (hoffentlich ist da immer ein Leerzeichen dazwischen!). Für das Finden des letzten Eintrages in der letzten Klammer ist zu beachten, dass eben auch mehrere Klammern existieren können, wie z. B. "Süßstoff (Stevia, Erythrit, o.Ä.) (nach Belieben)".
Herausgekommen ist dann folgendes Makros:

Code: Alles auswählen

Sub import_rezept

	oDoc=Thiscomponent
	'alte Daten löschen
	oDoc.sheets(0).getcellrangebyname("A3:C1000").clearcontents(7)
    sFile = FileOpenDialog
    if sFile<>"" and right(sFile,4)=".txt" then
		'Zugriff auf txt-Datei
		iNumber = Freefile
		Open sFile For Input As iNumber
		n=-1
		'Dim aListe(n)
		While Not EOF(iNumber)
			'Auslesen der Zeilen	
			Line Input #iNumber, sLine
			'Zerlegen nach jedem (
			atext=split(sLine,"(")			
			if ubound(atext)>0 then 'es sind Klammern da
				'Menge ist der Aufzählungswert in der letzten Klammer
				aMenge=split(atext(ubound(atext)),",") 'separiert nach Komma
				'Aufteilung der Menge in Zahl und Einheit anhand des Leerzeichens im letzten Aufzählungsteil
				stmp=split(trim(left(aMenge(ubound(aMenge)),len(aMenge(ubound(aMenge)))-1))," ")
				if val(stmp(0))>0 then 'Mengenangabe >0
					'Zutat ist der Text ohne die letzte Klammer und ohne führende Zahlenausdrücke
					Redim Preserve atext(ubound(atext)-1)
					zutat=trim(zahl_entfernen(join(atext(),"(")))
					n=n+1
					ReDim Preserve aListe(n)
					'Menge ist Zahlenwert
					menge=cdbl(stmp(0))
					'Einheit bestimmen, ggf. gibt es auch keine
					einheit=""
					if ubound(stmp)>0 then
						einheit=stmp(1)
					end if
					'Daten in Array schreiben
					aListe(n)=array(zutat,menge,einheit)
				end if
			end if
		Wend
		'Array in Tabelle 1 schreiben
		oBereich=oDoc.sheets(0).getcellrangebyposition(0,2,2,2+ubound(aliste())
		oBereich.setDataArray(aliste)
		'Beenden des Dateizugriffs
		Close #iNumber
		'Pivotabelle auf Tabellenblatt 2 aktualisieren
		ThisComponent.sheets(1).DataPilotTables(0).refresh()	
	end if
End Sub
Das ganze ist in der angehängten Datei verpackt, in der die Tabelle für die Einkaufsliste und die Pivotabelle vorbereitet sind.
Und nun: testen, testen, testen ...
Dateianhänge
makro_txt_einlesen.ods
(20.72 KiB) 120-mal heruntergeladen
Zuletzt geändert von mikeleb am So, 10.03.2019 18:09, insgesamt 1-mal geändert.
Gruß,
mikeleb
Clone Borg
Beiträge: 6
Registriert: Mi, 06.03.2019 20:38

Re: Eine Liste mit Rezepten (Einkaufsliste) für eine Woche mit Makros oder Funktionen zusammen fassen bzw. erstellen.

Beitrag von Clone Borg »

Super ich Flippe aus !!!!! Auch wenn ich es noch nicht getestet habe.
Das ging fix, Danke, Danke, Danke

Einfach Toll, werde sofort dran gehen und die einzelnen Schritte, mit meinen bescheidenen Kentnissen anschauen.

Mein Herzschrittmacher hat sich fast überschlagen.

Nochmal vielen vielen, nein, tausendmal Danke.

Gruß
Andreas
Clone Borg
Beiträge: 6
Registriert: Mi, 06.03.2019 20:38

Re: Eine Liste mit Rezepten (Einkaufsliste) für eine Woche mit Makros oder Funktionen zusammen fassen bzw. erstellen.

Beitrag von Clone Borg »

Hallo mikeleb

Der erste Probelauf ist für mich super was sage ich fast perfekt gelaufen. Was ich auf den ersten Blick gesehen habe liegt definitiv an der Liste bzw. an den Rezepten und an mir. Das ist in meinen Augen aber schon in Krümel suchen. Bin jetzt schon mit der Liste zufrieden, habe nicht erwartet das so schnell ein Ergebnis zustande gekommen ist. Einfach galaktisch. :-)

So, nun die Ergänzungen:

1. Habe ich vergessen zu erwähnen, das die *.txt Datei erst noch in ein UTF8 Format umgewandelt werden musste und alle Haken bei Trennoptionen außer Tabulatoren nicht gesetzt wurden.

2. Folgende Merkmale wurden in der Liste nicht berücksichtigt bzw. sind nicht optimal im Rezept beschrieben.
Fragezeichen ? vor den Zutaten
Singular und Plural z.B. Banane, Bananen oder Ei, Eier

Konnte die Orginal Datei „meinedatei.txt“ nicht angehängen, deshalb hier der https://www.dropbox.com/s/wwb43y27c9wgy ... i.txt?dl=0 Link von meiner Dropbox

Sind die Kriterien, zu aufwendig um diese zu eliminieren, habe ich keine Problem damit. Kann die restlichen Unstimmigkeiten auch manuell entfernen. Bin einfach begeistert und zufrieden mit dem jetzigen Ergebnis. Einfach Klasse, kann mich nur wiederholen, Danke, Danke, Danke.

LG
Andreas
mikeleb
*******
Beiträge: 1316
Registriert: Fr, 09.12.2011 16:50

Re: Eine Liste mit Rezepten (Einkaufsliste) für eine Woche mit Makros oder Funktionen zusammen fassen bzw. erstellen.

Beitrag von mikeleb »

Hallo,
schön, dass es soweit passt.
Habe ich vergessen zu erwähnen, das die *.txt Datei erst noch in ein UTF8 Format umgewandelt werden musste und alle Haken bei Trennoptionen außer Tabulatoren nicht gesetzt wurden.
An welcher Stelle musste die Umwandlung geschehen?
Fragezeichen ? vor den Zutaten
Ergänze das Fragezeiche in der function zahl_entfernen:

Code: Alles auswählen

function zahl_entfernen(sZutat)
	sZeichen=left(sZutat,1)
	if instr("0123456789,¼½¾ ?",sZeichen)>0 or asc(sZeichen)>8527 and asc(sZeichen)<8543 then
		sZutat=zahl_entfernen(mid(sZutat,2))
	end if
	zahl_entfernen=sZutat
end function
Singular und Plural
Das übersteigt ein einfaches Makro. Man könnte sich zwar eine Sammlung der wesentlichen Begriffe anlegen und das dann einpflegen, aber das dürfte ausufern ...
Gruß,
mikeleb
mikeleb
*******
Beiträge: 1316
Registriert: Fr, 09.12.2011 16:50

Re: Eine Liste mit Rezepten (Einkaufsliste) für eine Woche mit Makros oder Funktionen zusammen fassen bzw. erstellen.

Beitrag von mikeleb »

Hallo,
jetzt sollte es auch mit dem Schriftsatz klappen (getestet an deiner Datei unter Win7).
Dateianhänge
makro_txt_einlesen2.ods
(61.53 KiB) 107-mal heruntergeladen
Gruß,
mikeleb
Clone Borg
Beiträge: 6
Registriert: Mi, 06.03.2019 20:38

Re: Eine Liste mit Rezepten (Einkaufsliste) für eine Woche mit Makros oder Funktionen zusammen fassen bzw. erstellen.

Beitrag von Clone Borg »

Hallo mikeleb,

Nochmal vielen Dank, für die Hilfe

Bin zurzeit auf der Arbeit, danach im Sportstudio, komme heute möglicherweise nicht dazu zu es zu testen.

Kann Dir nur ungenau erzählen was ich meine mit UTF8. Nur soviel, wenn ich die Datei .txt lade muss ich Calc mitteilen WIE, damit nicht irgendwas in einer anderen Spalte gesetzt wird. Zumindest weiß ich noch, dass ich in einem Drop Down Menü sowas wie UTF8 eingestellt und alle Haken außer Tabstopp entfernt habe. Somit wurden dann alle Zeilen in einer Spalte wiedergegeben.
Hoffe ich habe es verständlich rüber gebracht, ansonsten werde ich später genauer den Vorgang beschreiben.

Danke, dass du das mit dem Fragezeichen so schnell gelöst hast, Wahnsinn am Sonntag um 23:02, kurz mal aus der Hüfte geschossen. :-)

Auch das mit dem Schriftsatz (weiß nicht genau was Du meinst), aber ich möchte mich schon mal dafür im Voraus bedanken.

Freu mich tierisch, meine Rezepte für nächste Woche zu erstellen. Dann habe ich wenigstens ein Einkaufsplan der wirklich auch so genannt werden kann. Ich frag mich sowieso warum dass in der App nicht drin ist. Hatte sogar beim Support angefragt, es hatten noch andere den Wunsch geäußert. Was war die Antwort „ist nicht vorgesehen“.

Aber es gibt ja noch fähige und sehr nette Menschen wie Du, vielen Dank.

Gruß
Andreas
mikeleb
*******
Beiträge: 1316
Registriert: Fr, 09.12.2011 16:50

Re: Eine Liste mit Rezepten (Einkaufsliste) für eine Woche mit Makros oder Funktionen zusammen fassen bzw. erstellen.

Beitrag von mikeleb »

Hallo,
für das Erstellen dieser Einklaufsliste muss die txt-Datei nicht erst in Calc geöffnet werden. KLicke einfach in "meiner" Datei auf den Button ...
Gruß,
mikeleb
Clone Borg
Beiträge: 6
Registriert: Mi, 06.03.2019 20:38

Re: Eine Liste mit Rezepten (Einkaufsliste) für eine Woche mit Makros oder Funktionen zusammen fassen bzw. erstellen.

Beitrag von Clone Borg »

Hallo mikeleb,

SUPER 8) Danke einfach Klasse, konnte einfach nicht warten.
Bin heute nicht ins Sportstudio gegangen, mußte unbedingt DEIN Programm (Makro) testen.

Was MUSS ich sagen einfach GENIAL.
Ich kann mich nur wiederholen Danke.

Hat alles geklappt, ich bin einfach zufrieden.
Wäre ich gläubig bzw. würde ich beten, dann hätte ich Dich bestimmt Heute Abend in mein Gebet eingebunden.

Vielen Dank nochmal für Deine Hilfe, Toll das es Euch gibt und uns "Noobs" so phantatisch unterstützt.

LG
Andreas (der Glückliche)
Clone Borg
Beiträge: 6
Registriert: Mi, 06.03.2019 20:38

Re: Eine Liste mit Rezepten (Einkaufsliste) für eine Woche mit Makros oder Funktionen zusammen fassen bzw. erstellen.

Beitrag von Clone Borg »

Hi mikeleb,

habe mir mal den Code angeschaut, muß sagen Du hast vollkommen Recht für mich ist es eine Herausforderung.

Denke da muss ich noch einiges lernen habe mir mal das Dokument "BASIC-Makros für OpenOffice und LibreOffice",
von Andrew Pitonyak, ins Deutsche übertragen und bearbeitet von Volker Lenhardt, heruntergeladen.

Fang mit "Hello World" ganz von vorne an. Hatte vor zig Jahren (ca. 35 Jahren) mit dem ZX81 (zum Selbstbau) angefangen, da gab es noch keine
Okjekt Programmierung bzw. hatte später ein wenig Assembler 8080, Basic, Pascal und VBA (alt) rein geschnuppert, der Commodore 64 war auch noch mit im Spiel. Aber alles nur so kleine Steuerprogramme bzw. Routinen.

Vielleicht kannst Du mir ein Buch für Anfänger empfehlen.

Gruß
Andreas
Antworten