jGnash CSV Import Plugin

jGnash CSV import plugin

Ob zur Finanzierung einer Weltreise oder zum Kauf einer neuen Kamera - eine Gegenüberstellung deiner Einnahmen und Ausgaben zeigt dir, wo du eventuell unnütz Geld ausgibst und du dieses besser für deine nächste Investition sparen kannst. Mit den Zahlen ist es auch möglich, eine Finanzplanung für die nächsten Monate zu erstellen und so auch den Fortschritt beim Ansparen für dein Ziel zu visualisieren. Früher unterstützte dabei das Haushaltsbuch, heute gibt es unzählige (freie) Programme, die uns die Eingabe und Auswertung erleichtern.

Eines davon ist jGnash, das ich hier kurz vorstelle. Hauptsächlich werde ich hier jedoch auf mein Plugin eingehen, mit dem du CSV (comma separated values) Dateien einfach in jGnash importieren kannst. Falls dein Internet Banking solche Dateien generieren kann, verringert sich der Aufwand für die Dateneingabe dadurch erheblich.

jGnash

jGnash ist eine freie Java-Anwendung zur Verwaltung und Planung deiner Finanzen. Unter folgenden URLs kannst du sie downloaden:

Zum Starten ist lediglich Java 1.7 oder höher erforderlich. Die beiligende Anleitung geht sowohl auf die Installation als auch die Funktionen detailliert ein, weswegen ich mich diesbezüglich hier kurz halte.

Etwas gewöhnungsbedürftig ist eventuell das Prinzip der doppelten Buchführung.

"Die doppelte Buchführung, auch kaufmännische Buchführung, ist die in der privaten Wirtschaft vorherrschende Art der Finanzbuchhaltung. Weil jede Buchung zwei Konten betrifft, jeweils eine Buchung auf der Soll-Seite (links), eine zweite auf der Haben-Seite (rechts), spricht man von doppelter Buchführung.
Die doppelte Buchführung unterteilt die Finanzen des Unternehmens in Konten. Die Konten sind wiederum in eine Soll- (S) und Habenseite (H) unterteilt. "Soll" ist immer links und "Haben" immer rechts. (Die Titel sind historisch bedingt und missverständlich; sie bedeuten ursprünglich: "wir sollen erhalten" und "wir haben zu zahlen". Die entsprechenden Bezeichnungen beim Girokonto sind aus Sicht der Bank zu verstehen.)"

Kommunalwiki

Dies ist aber mit jGnash leichter zu realisieren als es sich anhört. Zu Beginn ist wichtig, dass du dir eine zweckmäßige Kontenstruktur überlegst. Mit sogenannten Platzhalter-Konten ist eine Gruppierung möglich, die die Übersichtlichkeit noch erhöht.

jGnash CSV Import Plugin

Mein Online-Banking bietet die Möglichkeit, die Transaktionen als CSV (comma separated values) Datei zu exportieren. Jede Zeile ist eine Buchung und Datum, der Betrag, der Verwendungstext und so weiter sind, mit einem Strichpunkt getrennt, aufgelistet. Mithilfe dem CSV Import Plugin ist es nun möglich, diese Datei in jGnash wieder zu importieren. Das erspart eine Menge Tipparbeit und verhindert auch Fehler beim Abschreiben des Kontoauszugs.

Installation

  • Stelle sicher, dass du Java 7.0 oder höher installiert hast. Dies kannst du mit dem Befehl java -version kontrollieren.
  • Lade das in eine zip-Datei gepackte Plugin hier runter.
  • Entpacke die beiden Dateien in der zip-Datei in die folgenden Verzeichnisse:
    • csvimport-1.0.jar/csvimport-2.1.jar in das Verzeichnis plugins
    • guava-22.0.jar aus der zip-Datei oder von der Website in das Verzeichnis lib
  • Starte jGnash gegebenfalls neu

Falls im Menü Datei > Import der Eintrag CSV... nicht erscheint, verwende die Version 2.0 des Plugins. Seit ungefähr der jGnash Version 2.26 hat sich das Interface für Plugins etwas verändert, was in der Version 2.0 des Plugins angepasst wurde.

Achtung: Aktuell funktioniert das Plugin nur mit Java Swing, die jGnash Version, welche mit Fx endet, kann derzeit das Plugin nicht einbinden!

Vorbereitung der csv-Datei

Erstelle mithilfe deiner Online-Banking Software eine csv-Datei, wo jede Transaktion durch eine Zeile repräsentiert wird. Nachdem du sie auf deinem PC gespeichert hast, kannst du sie entweder mit einem Texteditor oder einer Tabellenkalkulation öffnen. Das Plugin unterstützt 2 Versionen von csv-Dateien:

1. Die erste Zeile beinhaltet die Spaltennamen. Dabei müssen 3 Spalten folgende Namen haben:

  • Datum (Datum an dem die Zahlung/Buchung durchgeführt wurde)
  • Betrag (der verbuchte Betrag; bei einer Abbuchung muss der Betrag negativ sein)
  • Text (Notiz, die den Grund der Buchung angibt)

Das folgende Beispiel zeigt, wie die Datei aussehen könnte:

Notizen;Datum;Betrag;Währung;
"Bohrmaschine";13.06.15;-110,00;EUR;
"Grillfleisch und Gemüse";13.06.15;-41,48;EUR;
"Mobilfunk Monatsabrechnung";14.06.15;-25,31;EUR;
"Wagenüberstellung";17.06.15;1050,31;EUR;

2. Es werden keine Spaltenüberschriften benötigt, jedoch muss die Position von 3 bestimmten Spalten genau eingehalten werden:

  • 2. Spalte: Text
  • 3. Spalte: Datum
  • 4. Spalte: Betrag

Das folgende Beispiel zeigt wieder, wie die Datei aussehen könnte:

15.06.2015;"Bohrmaschine";13.06.15;-110,00;EUR;13.06.2015 07:15:13:145;
15.06.2015;"Grillfleisch und Gemüse";13.06.15;-41,48;EUR;13.06.2015 11:56:20:694;
15.06.2015;"Mobilfunk Monatsabrechnung";14.06.15;-25,31;EUR;14.06.2015 09:43:03:527;
18.06.2015;"Wagenüberstellung";17.06.15;1050,31;EUR;17.06.2015 09:43:03:527;

Dieses Format liegt bereits vor, wenn du Online Banking bei der Raiffeisen Bank (in Österreich) verwendest.

Bei beiden Versionen beachte bitte folgende Hinweise:

  • Das Trennungszeichen muss ein Strichpunkt sein! Die Zeilen können, aber müssen nicht mit einem Strichpunkt abschließen.
  • Die Anführungszeichen zu beginn und am Ende des Textes werden automatisch weggeschnitten.
  • Das Format des Betrages und des Datums muss mit jenem deiner Ländereinstellung im Betriebssystem übereinstimmen. Bei der deutschen Einstellung wird normalerweise ein Beistrich als Komma verwendet und das Datum hat das Format 20.01.2015. Im Englischen wird ein Punkt als Komma verwendet und das Datum sieht wahrscheinlich so wie 20/01/15 aus. Probiere gegebenfalls verschiedene Formate aus, falls etwas nicht interpretiert werden kann, wird es auch nicht anzeigt.
  • Die Spalte Währung wird derzeit nicht interpretiert, die Buchungen werden in der Standardwährung, welche du bei der Einrichtung von jGnash ausgewählt hast, gespeichert.

Screenshots

Die folgenden Screenshots zeigen die Schritte zum Importieren der csv-Datei (zum Vergrößern der Ansicht bitte auf das Bild klicken).

Tips zum Sparen

Nachdem du nun deine Kosten mithilfe von jGnash im Überblick hast, kannst du hier noch nachlesen, wie du Geld für deine nächste Reise sparen kannst und dann während der Reise auch mit geringem Einsatz maximalen Spaß hast.

Preiswert Reisen auf Lilis Diary

So kannst du deine Weltreise finanzieren auf Back-Packer

Rich Dad, Poor Dad - Buchrezension

Erfolgreiche Geldanlage für Dummies* aus der erfolgreichen Serien für Dummies

Falls dir jGnash oder dieses CSV Import Plugin gefällt, würde ich mich sehr freuen, wenn du diese Seite teilst. Das Plugin ist wie jGnash selbst gratis, und es wäre mir eine Freude, damit dein Leben zu erleichtern.

Hier gibts noch mehr...

Falls dir die Seite gefällt, erzähle auch deinen Freunden davon!

Kommentar von Daniel |

Hi Johannes,

super Plugin, genau was ich brauche!

Ich habe Dein Plugin (Version 2.0) mit der aktuellen Version von jGnash 2.32.0 versucht, aber bei Ausführen des Menü-Eintrags "File -> Import -> CSV..:" folgende Fehlermeldung bekommen (s.u.). Die guava-22.0.rar habe ich in den lib-Ordner gelegt und die csvimport-2.0.rar in den plugins-Ordner.

By the way: Siehst Du eine Möglichkeit, Dein Plugin so zu erweitern, dass aus der CSV-Datei auch das Ziel-Konto für jede Transaktion ausgelesen wird?

Viele Grüße!
Daniel

java.lang.RuntimeException: java.util.concurrent.ExecutionException: java.lang.NoClassDefFoundError: com/google/common/base/Splitter
at info.johannesgruber.jgnash.plugin.csvimport.ImportCsvAction$ImportCsv.done(ImportCsvAction.java:115)
at javax.swing.SwingWorker$5.run(SwingWorker.java:737)
at javax.swing.SwingWorker$DoSubmitAccumulativeRunnable.run(SwingWorker.java:832)
at sun.swing.AccumulativeRunnable.run(AccumulativeRunnable.java:112)
at javax.swing.SwingWorker$DoSubmitAccumulativeRunnable.actionPerformed(SwingWorker.java:842)
at javax.swing.Timer.fireActionPerformed(Timer.java:313)
at javax.swing.Timer$DoPostEvent.run(Timer.java:245)
at java.awt.event.InvocationEvent.dispatch(InvocationEvent.java:311)
at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:756)
at java.awt.EventQueue.access$500(EventQueue.java:97)
at java.awt.EventQueue$3.run(EventQueue.java:709)
at java.awt.EventQueue$3.run(EventQueue.java:703)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:80)
at java.awt.EventQueue.dispatchEvent(EventQueue.java:726)
at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:201)
at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:116)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:105)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:101)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:93)
at java.awt.EventDispatchThread.run(EventDispatchThread.java:82)
Caused by: java.util.concurrent.ExecutionException: java.lang.NoClassDefFoundError: com/google/common/base/Splitter
at java.util.concurrent.FutureTask.report(FutureTask.java:122)
at java.util.concurrent.FutureTask.get(FutureTask.java:192)
at javax.swing.SwingWorker.get(SwingWorker.java:602)
at info.johannesgruber.jgnash.plugin.csvimport.ImportCsvAction$ImportCsv.done(ImportCsvAction.java:99)
... 20 more
Caused by: java.lang.NoClassDefFoundError: com/google/common/base/Splitter
at info.johannesgruber.jgnash.plugin.csvimport.parser.CsvParser.getColumNames(CsvParser.java:91)
at info.johannesgruber.jgnash.plugin.csvimport.parser.CsvParser.parse(CsvParser.java:43)
at info.johannesgruber.jgnash.plugin.csvimport.ImportCsvAction$ImportCsv.doInBackground(ImportCsvAction.java:88)
at info.johannesgruber.jgnash.plugin.csvimport.ImportCsvAction$ImportCsv.doInBackground(ImportCsvAction.java:1)
at javax.swing.SwingWorker$1.call(SwingWorker.java:295)
at java.util.concurrent.FutureTask.run(FutureTask.java:266)
at javax.swing.SwingWorker.run(SwingWorker.java:334)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
at java.lang.Thread.run(Thread.java:748)
Caused by: java.lang.ClassNotFoundException: com.google.common.base.Splitter
at java.net.URLClassLoader.findClass(URLClassLoader.java:381)
at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
... 10 more

Kommentar von Johannes |

Hi,
den Fehler habe ich gefixed und mit der Version 2.1 sollte die Fehlermeldung nicht mehr auftreten. Nachdem ich die guava-Version geändert hatte, passte ich nicht die MANIFEST-Datei an.

Wegen dem Zielkonto werde ich nichts machen, denn jGnash versucht aufgrund des Buchungstexts selbst das Zielkonto zu finden. Gibst du beispielsweise als Buchungstext immer "Miete" oder "Miete Whg" an, so versucht jGnash immer das Zielkonto, das beim vorherigen Mal ausgewählt wurde, wieder zu verwenden.

Schreibe mir - ich freue mich über deine Nachricht!

Bitte fülle alle Formularfelder mit einem Sternchen aus.

Der Artikel wurde zuletzt am 13.12.2017 geändert.
Das bin ich - Johannes Gruber
Geschrieben von

Reisen, Fotografieren, neues entdecken... Die Brötchen in der Software-Entwicklung verdienend, bin ich in meiner Freizeit auf der Suche nach neuen Plätzen und halte gerne besondere Momente mit der Kamera fest.

Zurück

Diese Internetseite verwendet Cookies, um die Nutzererfahrung zu verbessern und bestimmte Dienste anzubieten. Weiterlesen