Archive for the ‘Starmoney’ Category

Daten aus Starmoney mittels Powershell bearbeiten, Problem mit Delimiter sowie doppelten Feldnamen Kommentar und Originalbetrag

5 Januar 2018

In Starmoney kann man schon immer über den Punkt Verwaltung den Datenexport aufrufen und Daten im CSV-Format exportieren. Allerdings bin ich gerade auf ein Problem gestoßen, bei dem Versuch, die Daten als CSV-Datei zu speichern und mittels Powershell zu verarbeiten. Zum Einsatz kam Starmoney 10, ob dies bei anderen Versionen auch ein Problem ist, keine Ahnung.

Export aus Starmoney
Man geht also auf Verwaltung, Datenexport, wählt das Konto aus, bei Dateiformat verwendet man “Konfigurierbare CSV-Datei (UTF-8)(*.csv)”, als Konfigurationsname beim Format “Alle Spalten”, bestimmt den Zeitraum und klickt dann unten rechts auf Export. Die CSV-Datei findet sich dann im Verzeichnis C:\ProgramData\StarMoney 10\profil\export mit dem Dateinamen “Kontonummer_Währung_Datum_Uhrzeit.CSV”, also z. B. 99999999_EUR_20180105_155401.csv. Damit könnte die Sache bereits erledigt sein.

Import der CSV-Daten in Powershell
Ein einfaches

$b=Import-Csv ‚C:\ProgramData\StarMoney 10\profil\export\99999999_EUR_20180105_155401.csv‘
$b

sollte nun bereits alle Daten anzeigen. Doch leider ist dem nicht so! Denn es wird nur

Kontonummer;"Bankleitzahl";"Betrag";"Buchungstext";"Betrag – Währung";"Buchungstag";"Begünstigter/Absender –
Bankleitzahl";"Begünstigter/Absender – Kontonummer";"Begünstigter/Absender –
Name";"Internet";"Kategorie";"Kommentar";"Kostenstelle";"Laufende Nummer";"Marker";"Originalbetrag";"Originalbetrag –
Währung";"Primanota";"Saldo";"Saldo – Währung";"Storno";"Storno – Originalbetrag";"Splittbuchung – Auftraggeber /
Name";"Splittbuchung – Kategorie";"Splittbuchung – Kostenstelle";"Splittbuchung – Originalbetrag";"Splittbuchung –
Unterkategorie";"Splittbuchung – Verwendungszweckzeile 1";"Textschlüssel";"Unterkategorie";"Verwendungszweckzeile
1";"Verwendungszweckzeile 2";"Verwendungszweckzeile 3";"Verwendungszweckzeile 4";"Verwendungszweckzeile
5";"Verwendungszweckzeile 6";"Verwendungszweckzeile 7";"Verwendungszweckzeile 8";"Verwendungszweckzeile
9";"Verwendungszweckzeile 10";"Verwendungszweckzeile 11";"Verwendungszweckzeile 12";"Verwendungszweckzeile
13";"Verwendungszweckzeile
14";"Wertstellungstag";"Steuersatz";"SteuersatzWaehr";
"Steuerbetrag";"SteuerbetragWaehr";"Fibu-Nr.";"Splittbuchung –
Steuersatz";"Splittbuchung – SteuersatzWaehr";"Splittbuchung – Steuerbetrag";"Splittbuchung –
SteuerbetragWaehr";"Splittbuchung – Fibu-Nr.";"Kommentar";"Abweichender Auftraggeber";"Ende zu Ende
Referenz";"Kundenreferenz";"Mandatsreferenz";"Purpose Code";"Rückgabegrund";"Rückgabegrund (Code)";"Entgelt
(fremd)";"Entgelt (fremd) Währung";"Entgelt (eigen)";"Entgelt (eigen)
Währung";"Zinskompensationsbetrag";"Zinskompensationsbetrag Währung";"Originalbetrag";"Originalbetrag
Währung";"Gläubiger-Identifikation"
———————————————————————————————————————–
99999999;"99999999";100

ausgegeben. Wo ist das Problem?

Erstes Problem der Feldtrenner
Wenn man aus Starmoney exportiert, wird der Semikolon (;) Feldtrenner verwendet. Man könnte dies nun beim Export aus Starmoney ändern, aber einfacher ist es Powershell zu sagen, dass ; verwendet werden soll. Dazu gibt es zwei Möglichkeiten, entweder über den Parameter –Useculture oder durch direkte Angabe von –Delimiter ‚;‘. Den aktuellen Delimiter kann man mittels (Get-Culture).textinfo.listseparator in Erfahrung bringen. Wir wählen aber die direkte Angabe des Delimiter beim Import, damit die Sachlage eindeutig ist:

$b=Import-Csv ‚C:\ProgramData\StarMoney 10\profil\export\99999999_EUR_20180105_155401.csv‘ –Delimiter ‚;‘
Import-Csv : Das Element "Kommentar" ist bereits vorhanden.
In Zeile:1 Zeichen:4
+ $b=Import-Csv .\test.csv -Delimiter ‚;‘
+    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : NotSpecified: (:) [Import-Csv], ExtendedTypeSystemException
    + FullyQualifiedErrorId : AlreadyPresentPSMemberInfoInternalCollectionAdd,Microsoft.Power
Shell.Commands.ImportCsvCommand

Zweites Problem doppelte Feldnamen
Oha, was geht da? Doppelte Feldnamen? Das sollte eigentlich schon vom exportierenden Programm unterbunden werden. Doch Starmoney lässt sich davon nicht beeindrucken. Selbst beim Versuch über das umständliche Konfigurieren innerhalb von Starmoney und entfernen des zweiten Kommentarfelds und Zuweisung über den Konfigurationsnamen und mehrfachen Versuchen, bestand Starmoney darauf, dass Kommentarfeld doppelt zu exportieren. Selbst als das Kommentarfeld in der CSV-Datei manuell geändert wurde, wartete Starmoney mit der nächsten Fehlermeldung auf:

$b=Import-Csv ‚C:\ProgramData\StarMoney 10\profil\export\99999999_EUR_20180105_155401.csv‘ –Delimiter ‚;‘
Import-Csv : Das Element "Originalbetrag" ist bereits vorhanden.
In Zeile:1 Zeichen:4
+ $b=Import-Csv .\test.csv -Delimiter ‚;‘
+    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : NotSpecified: (:) [Import-Csv], ExtendedTypeSystemException
    + FullyQualifiedErrorId : AlreadyPresentPSMemberInfoInternalCollectionAdd,Microsoft.Power
Shell.Commands.ImportCsvCommand

Ja da kommt Freude auf.

Automatisch doppelte Feldnamen entfernen
Da der Export möglichst einfach sein sollte, wurde darauf verzichtet zu versuchen Starmoney das korrekte Verhalten beizubringen statt dessen wird nun über dieses Powershellscript der Header so geändert, dass die beiden doppelten Feldnamen eindeutig werden:

$filename=’C:\ProgramData\StarMoney 10\profil\export\99999999_EUR_20180105_155401.csv‘
[regex]$pattern=’"Kommentar"‘
$c=$pattern.Replace([IO.File]::ReadAllText($filename),’"Kommentar1"‘,1)
[regex]$pattern=’"Originalbetrag"‘
$c=$pattern.Replace($c,’"Originalbetrag1"‘,1)
$c|set-content (Join-Path (Split-Path $filename) HeaderOK.csv) -Encoding UTF8

Dabei wird der erste Feldnamen Kommentar durch Kommentar1 und der zweite Feldname Originalbetrag durch Originalbetrag1 ersetzt sowie anschließend in der Datei HeaderOK.csv gespeichert.

Dadurch können nun die Daten problemlos eingelesen werden:

$b=import-csv (Join-Path (Split-Path $filename) HeaderOK.csv) -Delimiter ‚;‘