Registriert seit: 06.12.2024
Version(en): keine Ahnung
Ich suche eine Möglichkeit CSV Dateien im UTF-8 Format per Makro einzulesen. Von Hand geht es problemlos (wie hier beschrieben: https://www.rechtsmedizin.med.uni-muench...index.html), Excel kann es also! Leider kann ich nicht finden, wie ich es in einem Excel Makro aufrufen kann (Workbooks.Open, https://learn.microsoft.com/de-de/office...books.open). Hat jemand eine Idee? Zum besseren Verständnis/testen hier eine Liste mit den lustigen Sonderzeichen, die mir Kopfschmerzen bereiten:
Code: Vorname,Nachname José,González Chloë,Moreau Björn,Håkansson Zoë,Müller François,Dupont Søren,Larsen İbrahim,Demir Łukasz,Kowalski Jürgen,Schäfer Céline,Dumont Åsa,Lindgren Antonín,Dvořák Maëlle,Lefèvre Özgür,Yılmaz Élodie,Tremblay
Registriert seit: 11.04.2014
Version(en): 2021
Hallo,
hast Du schon einmal versucht, Deine manuellen Schritte zum Einlesen der Datei mit dem Makro-Rekorder auszunehmen? Ja? Was ist denn dabei herausgekommen?
Gruß Günter aus der Helden-, Messe-, Musik-, Buch-, Universitäts- und Autostadt Leipzig
Folgende(r) 1 Nutzer sagt Danke an Glausius für diesen Beitrag:1 Nutzer sagt Danke an Glausius für diesen Beitrag 28
• ExcelEnte
Registriert seit: 18.10.2020
Version(en): 365
06.12.2024, 23:14
(Dieser Beitrag wurde zuletzt bearbeitet: 06.12.2024, 23:14 von Warkings.)
(06.12.2024, 18:05)Glausius schrieb: Hallo,
hast Du schon einmal versucht, Deine manuellen Schritte zum Einlesen der Datei mit dem Makro-Rekorder auszunehmen? Ja? Was ist denn dabei herausgekommen? Heute hat man doch für so etwa KI, mein Prompt hat sofort funktionierenden Code ergeben Code: Function ReadUTF8FileToString(filePath As String) As String Dim fileContent As String Dim fileStream As Object On Error GoTo ErrorHandler ' Create an instance of the ADODB Stream object Set fileStream = CreateObject("ADODB.Stream") With fileStream .Type = 2 ' Specify text stream .Charset = "UTF-8" ' Specify UTF-8 encoding .Open .LoadFromFile filePath fileContent = .ReadText .Close End With ' Return the read content ReadUTF8FileToString = fileContent Exit Function
ErrorHandler: ' Handle errors and return an empty string in case of failure ReadUTF8FileToString = "" MsgBox "Error reading file: " & Err.Description, vbCritical End Function
Code: Sub TestReadUTF8File() Dim filePath As String Dim fileContent As String filePath = "C:\Temp\sample_utf8.txt" ' Update this path to your file location fileContent = ReadUTF8FileToString(filePath) If fileContent <> "" Then MsgBox "File Content:" & vbCrLf & fileContent Else MsgBox "Failed to read the file or the file is empty.", vbExclamation End If End Sub
PS Ich hatte explizit VBA im Prompt geschrieben, also gibt es VBA Code PPS Powerquery M-COde wird auch geliefert und wenn man will, auch die Beschreibung wie man es in der GUI macht
Folgende(r) 1 Nutzer sagt Danke an Warkings für diesen Beitrag:1 Nutzer sagt Danke an Warkings für diesen Beitrag 28
• ExcelEnte
Registriert seit: 22.09.2024
Version(en): 2010
07.12.2024, 13:31
(Dieser Beitrag wurde zuletzt bearbeitet: 07.12.2024, 13:31 von knobbi38.)
Wenn du meinst, daß deine KI hier richtig liegt bzw. dafür schon eine KI notwendig ist, aber normalerweise werden CSV Dateien nicht geöffnet und eingelesen, sondern sollten importiert werden, z.B. mit dem QueryTable-Objekt. Mit der Property ".TextFilePlatform = 65001" wird dann eingestellt, daß die Ursprungsdatei im UTF-8 Format ist.
Das entspricht dann auch dem , was schon manuell mit dem "alten" Textimportassistenten gemacht worden ist.
Gruß Knobbi38
Registriert seit: 06.12.2024
Version(en): keine Ahnung
10.12.2024, 16:19
(Dieser Beitrag wurde zuletzt bearbeitet: 10.12.2024, 16:21 von ExcelEnte.)
Bei der Makro Aufzeichnung kam was heraus, aber nichts was mir geholften hätte, leider. Aber die Idee war auf jeden Fall gut.
Der Import mit der Funktion (Stream lesen) hat funktioniert!
Registriert seit: 22.09.2024
Version(en): 2010
Zitat:Bei der Makro Aufzeichnung kam was heraus, aber nichts was mir geholften hätte, leider. Wo war jetzt damit das Problem? Welchen Code hast du denn letztendlich verwendet?
Registriert seit: 06.12.2024
Version(en): keine Ahnung
Das macht genau das, was ich gesucht habe Code: Function ReadUTF8CSVToSheet(file As String) Dim ws As Worksheet Dim strText As String ' read utf-8 file to strText variable With CreateObject("ADODB.Stream") .Open .Type = 1 ' Private Const adTypeBinary = 1 .LoadFromFile file .Type = 2 ' Private Const adTypeText = 2 .Charset = "utf-8" strText = .ReadText(-1) ' Private Const adReadAll = -1 End With ' parse strText data to a sheet Set ws = Sheets.Add() intRow = 1 For Each strLine In Split(strText, Chr(10)) If strLine <> "" Then With ws .Cells(intRow, 1) = strLine .Cells(intRow, 1).TextToColumns Destination:=Cells(intRow, 1), DataType:=xlDelimited, _ TextQualifier:=xlDoubleQuote, ConsecutiveDelimiter:=False, Tab:=False, _ Semicolon:=True, Comma:=False, Space:=False, Other:=False End With intRow = intRow + 1 End If Next strLine ReadUTF8CSVToSheet = ws.Name End Function
|