BITTE helfen Sie uns HEUTE mit einer SPENDE
Helfen Sie das LibreOffice Forum zu erhalten!

❤️ DANKE >><< DANKE ❤️

> KEINE WERBUNG FÜR REGISTRIERTE BENUTZER!<
Ihre Spende wird für die Deckung der laufenden Kosten sowie den Erhalt und Ausbau 🌱 des LibreOffice Forums verwendet.
🤗 Als Dankeschön werden Sie im Forum als LO-SUPPORTER gekennzeichnet. 🤗

[GELÖST] *.csv von Bank importieren

Alles zur Programmierung im LibreOffice.
Antworten
Ich Bins
Beiträge: 236
Registriert: Do 2. Aug 2018, 12:30

[GELÖST] *.csv von Bank importieren

Beitrag von Ich Bins » Di 3. Mai 2022, 22:04

Hallo zusammen,

zwei Jahre lang konnte ich mit dem Makro aus diesem thread
viewtopic.php?f=12&t=25465
die csv-Dateien meiner Bank importieren. Im Februar 2022 änderte die Bank
das Format der Dateien. Die Anpassung des Makros war relativ einfach.
Die Bank hat nun schon wieder eine Änderung gemacht und ich muss schon
wieder das Makro anpassen. Die Umlaute und das ß werden falsch dargestellt.
Öffne ich manuell die Datei werden die Umlaute und das ß richtig dargestellt.
Ich gehe davon aus, dass in der Zeile

Code: Alles auswählen

	args(2).Value = "59,34,0,1,2/4/3/4,0,false,true,true"
in nachfolgendem Code eine Änderung nötig.

Wo kann ich eine Beschreibung der Filteroptionen finden, meine Suche danach
war leider erfolglos.

Anbei ist eine csv-Beispieldatei mit zwei Zeilen in der sich ein Umlaut befindet.

Viele Grüße
ich Bins

Code: Alles auswählen

Sub CSV_Import()

	'Kontodatei.ods als Objekt in Variable schreiben
	oKontoDoc = ThisComponent
	'Dateiauswahl-Dialog erzeugen
	oFilePicker = createUnoService("com.sun.star.ui.dialogs.FilePicker")
	oFilePicker.setMultiSelectionMode(False)
	'Filter für die Dateiauswahl initialisieren
	oFilePicker.appendFilter("Alle Dateien", "*.*") 	
	oFilePicker.appendFilter("csv - Dateien", "*.csv")
	'Filter für cvs-Dateien aktivieren
	oFilePicker.setCurrentFilter("csv - Dateien")
	'Dialog aufrufen und auswerten
	if oFilePicker.execute()=1 then 'wenn nicht abgebrochen
		'Auslesen der gewählten Datei
		oFiles= oFilePicker.getFiles() 'url der datei
		'Setzen der Importoptionen
		sFileURL=oFiles(0)
		Dim Args(2) as New com.sun.star.beans.PropertyValue
		args(1).Name = "FilterName"
		args(1).Value = "Text - txt - csv (StarCalc)"
		args(2).Name = "FilterOptions"
		args(2).Value = "59,34,0,1,2/4/3/4,0,false,true,true"
		'Öffnen des Dokuments
	    oImportDoc = StarDesktop.loadComponentFromURL(sFileURL,"_blank", 0, Args())
	end if

'   Isoliert die Jahreszahl aus dem Dateinamen
	varArbeitsblatt = Mid(oImportDoc.Title, 33, 4)
'	Zugriff auf das 1. Tabellenblatt
	oExtCSVBlatt = oImportDoc.Sheets(0)
'   Erste Zeilen löschen: Index und Anzahl
'    myrows=oExtCSVBlatt.getrows
'    myrows.removebyindex(0,15)
'   letzte Zelle des Bereiches
	ocursor = oExtCSVBlatt.createCursor()
	ocursor.gotoStart()	
	ocursor.gotoEndofUsedArea(false)			
'   index letzte Spalte des Bereichs
'    varLetzteSpalte = ocursor.getRangeAddress.endColumn
'   index letzte Zeile des Bereichs
	varLetzteZeile = ocursor.getRangeAddress.endRow
'   letzt drei Zeilen löschen	  
    myrows.removebyindex(varLetzteZeile - 2,varLetzteZeile)
	oExtCSVSpalte=oExtCSVBlatt.getColumns

'	Zugriff auf das 1. Tabellenblatt
	oSheet = oImportDoc.Sheets(0)
	myColumn=oSheet.getColumns
	'Quell- und Zielspalten für Verschiebung
	aQuelle=array("E","M","N","I","B")
    aZiel=array("D","E","F","H","L")
	'Kopieren
	for i=0 to ubound(aQuelle)
		oQuelleRange=mycolumn.getByName(aQuelle(i))
		oQuellRangeAddresse = oQuelleRange.getRangeAddress
		oZiel = mycolumn.getByName(aZiel(i)).getCellByPosition(0,0)
		oZielCellAdresse=oZiel.getCellAddress
		oSheet.copyRange(oZielCellAdresse,oQuellRangeAddresse)
	next
	'Spalten leeren
'	mycolumn.getByName("E").ClearContents(1023)
	mycolumn.getByName("I").ClearContents(1023)
'   Spalte BLZ und Währung löschen
    myColumn.removeByIndex(13,1)
    myColumn.removeByIndex(12,1)
    myColumn.removeByIndex(1,1)    
	'neue Spaltenüberschriften
	oSheet.getCellByPosition(1,0).string="Vorgang"
	oSheet.getCellByPosition(2,0).string="Buchungstext"
	oSheet.getCellByPosition(3,0).string="Betrag"
	oSheet.getCellByPosition(4,0).string="S-H"
	oSheet.getCellByPosition(5,0).string="IBAN/Kontonummer"
	oSheet.getCellByPosition(6,0).string="BIC/BLZ"
	oSheet.getCellByPosition(7,0).string="Saldo"
	oSheet.getCellByPosition(8,0).string="Verwendungszweck"
'   Spaltenüberschrift fett formatieren
	oRange = oSheet.getCellRangeByName("A1:K1")
  	oRange.CharWeight = com.sun.star.awt.FontWeight.BOLD
'   Spaltenbreite optimieren
	oSheet.Columns(0).OptimalWidth = True
	oSheet.Columns(1).OptimalWidth = True	
	oSheet.Columns(2).OptimalWidth = True	
	oSheet.Columns(3).OptimalWidth = True	
	oSheet.Columns(4).OptimalWidth = True	
	oSheet.Columns(5).OptimalWidth = True	
	oSheet.Columns(6).OptimalWidth = True
	oSheet.Columns(7).OptimalWidth = True	
        oSheet.Columns(8).Width = 4000
	oSheet.Columns(9).OptimalWidth = True	
'   Reihenfolge vertauschen
	oCellCursor = oSheet.createCursor
        oCellCursor.GotoEndOfUsedArea(False)
    oBereich=oSheet.getCellRangeByPosition(0,1,oCellCursor.getRangeAddress().endColumn,oCellCursor.getRangeAddress().endRow)
    'Zellinhalt in Array lesen
    aDaten()=oBereich.getDataArray
    'Zeilen- und Spaltenanzahl merken
    zeilen=ubound(aDaten())
    spalten=ubound(aDaten(0))
    'Zeilen vertauschen
    for i=0 to zeilen/2
		tmp=aDaten(zeilen-i)
		aDaten(zeilen-i)=aDaten(i)
		aDaten(i)=tmp
    next
'   ab hier stehen die aufbereiteten Daten zur Verfügung
'   letzte nicht leere Zeile in der Kontodatei ermitteln

'------andere Variablenbezeichnung wählen, oSheet bleibt für die csv
	oZiel = oKontoDoc.Sheets().getByName(varArbeitsblatt)
	ocursor = oZiel.createCursor()
	ocursor.gotoStart()	
'------------------------------------------	
'   letzte Zelle des Bereiches
	ocursor.gotoEndofUsedArea(false)
'   letzte Zeile des Bereichs	
	varEinfuegezeile = ocursor.getRangeAddress.endRow + 3
'   Bereich zum Einfügen festlegen
'	Der Bereich muss dieselbe Größe haben, wie der Ursprungsbereich!
    oZielBereich = oZiel.getCellRangeByPosition(3,varEinfuegezeile,3+spalten,varEinfuegezeile+zeilen)
'   Test ob das Auswählen der Zelle korrekt war
'	mycell.string = "Probe"
'   die nächste Zeile fügt die gedrehten Daten in die csv-Datei ein   
	oZielBereich.setDataArray(aDaten)
'   csv-Datei schließen
	oImportDoc.close(false)
End Sub
Dateianhänge
Umsaetze_DE12345678901234567890_2022.05.03.zip
(439 Bytes) 72-mal heruntergeladen
Zuletzt geändert von Ich Bins am So 8. Mai 2022, 22:27, insgesamt 2-mal geändert.

mikele
Beiträge: 1642
Registriert: Mo 1. Aug 2011, 20:51

Re: *.csv von Bank importieren

Beitrag von mikele » Di 3. Mai 2022, 23:37

Hallo,
du wirst den richtigen Zeichensatz (UTF-8 oder so ...) auswählen müssen.
https://help.libreoffice.org/latest/de/ ... PAR=SHARED
Gruß,
mikele

Ich Bins
Beiträge: 236
Registriert: Do 2. Aug 2018, 12:30

Re: *.csv von Bank importieren

Beitrag von Ich Bins » Mi 4. Mai 2022, 08:47

Hallo mikele,

die Problemlösung war

Character Set Codes for Token 3
für Unicode (UTF-8) = 76

Code: Alles auswählen

args(2).Value = "59,34,76,1,2/4/3/4,0,false,true,true"
Ich danke Dir für Deine Hilfe.

Viele Grüße
Ich Bins

An alle, die das LibreOffice-Forum nutzen:


Bitte beteiligen Sie sich mit 7 Euro pro Monat und helfen uns bei unserem Budget für das Jahr 2024.
Einfach per Kreditkarte oder PayPal.
Als Dankeschön werden Sie im Forum als LO-SUPPORTER gekennzeichnet.

❤️ Vielen lieben Dank für Ihre Unterstützung ❤️

Antworten