Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1516to1520
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

UTF8 Optimierung export

UTF8 Optimierung export
04.10.2016 23:51:06
rocketfox
Hallo ich hatte schon einmal eine Frage gestellt wie ich ein Tabellen Blatt als txt im UTF8 exportiere.
daruf hin gab es 2 hilfen
die erste von baschti007

Sub export3()
Dim r        As Long
Dim arr      As Variant
Dim file     As Variant
Dim makeFile As String
makeFile = ActiveWorkbook.Path & "\export.txt"  ' Pfad
Set file = CreateObject("Scripting.FileSystemObject").createtextfile(makeFile, True, True) ' _
_
_
_
_
_
export.txt wird erstellt
With ActiveSheet
arr = .Range(.[A1], .UsedRange.Cells(.UsedRange.Cells.Count)) ' der Bereich der _
Kopiert werden soll wird festgelegt
If Not IsArray(arr) Then ' wenn der Bereich kein Array (nur eine Zeile also die erste)
file.WriteLine arr ' wird die erste Zeile in die TXT geschrieben
Else
For r = 1 To UBound(arr) ' Hier wird das array auseinander gepflückt für jede Zeile  _
_
_
_
_
_
( bei dir 95)
file.WriteLine Join(WorksheetFunction.Index(arr, r, 0), Chr(9)) ' hier wird die _
Zeile r in die Txt eingetragen und die einzelnen Spalten mit einem  Tab(Chr(9)) getrennt
Next
End If
End Sub
die Zweite von SFB
Sub export2()
Tabelle1.UsedRange.Copy
With GetObject("New:{1C3B4210-F441-11CE-B9EA-00AA006B1A69}")
.GetFromClipboard
CreateObject("scripting.filesystemobject").createtextfile("c:\OF\UTf8.txt").write .GetText
End With
End Sub

bei version 1 dauert der export bei 8000 zeilen ca 7 min statt nur wenige sekunden kann hier etwas optimiert werden? sonst läuft alles problemlos.
bei version 2 geht der export in Sekunden aber es werden nicht alle zeichen korrekt

exportiert
80	Ś
81	ś
82	Ş
83	Š
84	š
85	Ţ
86	ţ
87	Ű
88	ű
89	Ÿ
90	Ź

diese Sonderzeichen sind der massstab
ich hoffe jemamd hat eine idee.
gruß chris

3
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: UTF8 Optimierung export
05.10.2016 07:32:06
baschti007
Du kannst es ja nochmal so testen
Gruß Basti

Sub blaa()
Call SaveUTF8File(ActiveSheet.Name)
End Sub
Sub SaveUTF8File(ByVal WsName As String)
Dim fname As Variant
Dim myfilename As Variant
Dim strOrdner As String
Dim wb As Workbook
Dim ws As Worksheet
Set wb = ThisWorkbook
Set ws = wb.Worksheets(WsName)
With Application.FileDialog(msoFileDialogFolderPicker)
.InitialFileName = "C:\"
.Title = "Ordnerauswahl"
.ButtonName = "Auswahl..."
.InitialView = msoFileDialogViewList
If .Show = -1 Then
strOrdner = .SelectedItems(1)
If Right(strOrdner, 1)  "\" Then strOrdner = strOrdner & "\"
Else
strOrdner = ""
End If
End With
If strOrdner = "" Then
MsgBox ("Kein Ordner gewählt!")
Else
If MsgBox("Wirklich " & WsName & " TXT Datei erstellen ?", vbYesNo) = vbYes Then
myfilename = WsName & "_" & Format(Date, "DDMMYYYY")
fname = strOrdner & myfilename & ".txt"
If fname = False Then Exit Sub
Call SaveAsUTF8TXT(fname, ws)
End If
End If
End Sub
Sub SaveAsUTF8TXT(ByVal fname As String, ByVal wsa As Worksheet)
Dim hfile As Integer    ' Filehandle bzw. Dateinummer
Dim i As Long           ' Zähler über alle Zeilen
Dim j As Integer        ' Zähler über alle Spalten
Dim OneLine As String   ' Eine Zeile als String
Dim maxcol As Integer   ' max. Anzahl an Spalten
With wsa
hfile = FreeFile
maxcol = .Cells.SpecialCells(xlCellTypeLastCell).Column
Open fname For Output As #hfile
Print #hfile, Chr(&HEF); Chr(&HBB); Chr(&HBF);
For i = 1 To .Cells.SpecialCells(xlCellTypeLastCell).Row
OneLine = ""
For j = 1 To maxcol - 1
OneLine = OneLine & Replace(.Cells(i, j).Text, Chr(34), Chr(34) & Chr(34)) & Chr(9)
Next
OneLine = OneLine & Replace(.Cells(i, j).Text, Chr(34), Chr(34)) & vbCrLf
Print #hfile, GetUTF8String(OneLine);
Next i
Close #hfile
End With
End Sub
' frei nach http://www. _
vovisoft.com/unicode/UniFunctions.htm#ToUTF8
Private Function GetUTF8String(s As String) As String
Dim i As Integer  ' Zähler über die einzelnen Zeichen des utf16-Strings
Dim utf16 As Long, uc(2) As Byte
GetUTF8String = ""
For i = 1 To Len(s)
utf16 = AscW(Mid(s, i, 1))
If utf16 

Anzeige
AW: UTF8 Optimierung export
05.10.2016 22:58:31
rocketfox
Hallo ich habe diesen dicken Brocken einmal eingebunden.
Die Speicherung ist sehr fix vielen dank.
bei der Variante habe ich aber wieder Probleme mit DoppelAnführungzeichen. [aus " wird machmal "" ]
siehe Beispiel warum es nicht immer ist kann ich nicht erkennen.
https://www.herber.de/bbs/user/108609.xlsm
gruß chris
AW: UTF8 Optimierung export
06.10.2016 07:15:57
baschti007
Tja mit deiner ersten Bsp. Datei ( aus dem anderem Thread) klappt es.
Ändere mal so

Sub SaveAsUTF8TXT(ByVal fname As String, ByVal wsa As Worksheet)
Dim hfile As Integer    ' Filehandle bzw. Dateinummer
Dim i As Long           ' Zähler über alle Zeilen
Dim j As Integer        ' Zähler über alle Spalten
Dim OneLine As String   ' Eine Zeile als String
Dim maxcol As Integer   ' max. Anzahl an Spalten
With wsa
hfile = FreeFile
maxcol = .Cells.SpecialCells(xlCellTypeLastCell).Column
Open fname For Output As #hfile
Print #hfile, Chr(&HEF); Chr(&HBB); Chr(&HBF);
For i = 1 To .Cells.SpecialCells(xlCellTypeLastCell).Row
OneLine = ""
For j = 1 To maxcol - 1
OneLine = OneLine & Replace(.Cells(i, j).Text, Chr(34), Chr(34)) & Chr(9)
Next
OneLine = OneLine & Replace(.Cells(i, j).Text, Chr(34), Chr(34)) & vbCrLf
Print #hfile, GetUTF8String(OneLine);
Next i
Close #hfile
End With
End Sub

Habe da nun einmal Chr(34) raus genommen.
Gruß Basti
Anzeige

88 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige