Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1356to1360
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

Mit Excel VBA Text-Datei schreiben (UTF-8)

Mit Excel VBA Text-Datei schreiben (UTF-8)
05.05.2014 15:01:07
Ingo
Hallo
Ich habe hier eine Excel Tabelle mit diversen Produkt-Daten.
Mit einem VBA-Script schreibe ich aus den jeweiligen Datensätzen (Tabellenzeilen) HTML-Dateien.
Diese sind ja dann ja erstmal ANSI-codiert.
Da ich meine Website aber gerne auf UTF-8 und HTML5 umstellen möchte, brauche ich diese Dateien mit folgender Zeichensatzkodierung: UTF-8 ohne BOME.
Meine Frage ist nun, ob ich in mein VBA-Script irgendwie einbauen kann, dass die Dateien mit UTF-8 ohne BOME "erzeugt" werden.
Hier mal der Code (verkürzst), den ich bisher anwende:
petFile = Range("BestNr").Cells(iRow) & ".html"
Open "D:\" & petFile For Output As iFile
iRow = ActiveCell.Row
Print #iFile, "" & Range("Produkt").Cells(iRow) & ""
Aus der Spalte mit dem Namen "BestNr" werden die Dateinamen "geholt".
Ich habe hier jetzt nur eine Zeile (die mit dem "title") gepostet, damit es nicht so lang und unübersichtlich wird.
Ich habe auch schon gestern den ganzen Tage herumgegoogelt usw.
Es gibt da auch viele Ergebnisse zu dem Thema.
Weil meine VBA-Fähigkeiten aber leider recht klein sind, steige ich da nicht richtig durch.
Bevor ich mein Vorhaben aufgebe und auf UTF-8 verzichte, würde ich gerne wissen, ob man Excel VBA dazu veranlassen kann, die Dateien UTF-8 codiert zu speichern.
Oder ist das nur sehr sehr kompliziert und schwierig machbar?
Über Ratschläge/Hilfe würde ich mich wirklich riesig freuen, weil ich echt glaube, dass ich das alleine nicht hinbekommen würde.
Gruß
Ingo

30
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Mit Excel VBA Text-Datei schreiben (UTF-8)
05.05.2014 15:39:31
mumpel
Hallo!
Option Private Module
Option Explicit

Declare Function WideCharToMultiByte Lib "kernel32.dll" (ByVal CodePage As Long, _
                                                         ByVal dwFlags As Long, _
                                                         ByVal lpWideCharStr As Long, _
                                                         ByVal cchWideChar As Long, _
                                                         ByVal lpMultiByteStr As Long, _
                                                         ByVal cbMultiByte As Long, _
                                                         ByVal lpDefaultChar As Long, _
                                                         ByVal lpUsedDefaultChar As Long) As Long


Sub UTF8Output(Datei As String, t As String, Optional BOM As Boolean = False)
    
    Dim tmp() As Byte, l As Long, FF As Integer
        
    If Len(Datei) = 0 Or Len(t) = 0 Then Exit Sub
    l = WideCharToMultiByte(65001, 0, _
        StrPtr(t), Len(t), 0, 0, 0, 0)
    Redim tmp(0 To l - 1)

    WideCharToMultiByte 65001, 0, StrPtr(t), Len(t), _
        VarPtr(tmp(0)), l, 0, 0
    FF = FreeFile
    Open Datei For Output As #FF
    Close #FF
    FF = FreeFile
    Open Datei For Binary As #FF
       Put #FF, , tmp
    Close #FF

End Sub


VBA/HTML - CodeConverter für Office-Foren
AddIn für Excel/Word 2000-2010 - komplett in VBA geschrieben von Lukas Mosimann
Projektbetreuung durch mumpel



Code erstellt und getestet in Office 15
Gruß, René

Anzeige
AW: Mit Excel VBA Text-Datei schreiben (UTF-8)
05.05.2014 18:03:39
Ingo
Bei meiner Suche per Goolge und co. bin ich immer wieder auf das hier gestoßen:
http://www.robvanderwoude.com/vbstech_files_utf8.php
Das wird immer wieder als eine wohl sehr gut funktionierenede Lösung genannt.
Aber auch da weis ich dann nicht, wie ich das in meinen Code einbauen kann/muss.

AW: Mit Excel VBA Text-Datei schreiben (UTF-8)
05.05.2014 18:26:39
mumpel
Zu kompliziert.

AW: Mit Excel VBA Text-Datei schreiben (UTF-8)
05.05.2014 18:44:34
Ingo
OK.

Nachtrag:
05.05.2014 15:50:27
mumpel
Hier noch ein Beispiel für den Aufruf des Codes.
Sub Beispieldatei()
  
  Dim Textfile As String
  Dim strText As String

      Textfile = Environ("USERPROFILE") & "\Desktop\Test.txt"
      UTF8Output Textfile, "ÄÖÜ"

End Sub


VBA/HTML - CodeConverter für Office-Foren
AddIn für Excel/Word 2000-2010 - komplett in VBA geschrieben von Lukas Mosimann
Projektbetreuung durch mumpel



Code erstellt und getestet in Office 15

Anzeige
AW: Nachtrag:
05.05.2014 18:01:36
Ingo
Erstmal danke ich Dir sehr für Deine Hilfe.
Aber ich komme damit nicht klar.
Ich weis leider nicht wirklich, wie ich das jetzt in meinen Code einbauen muss.
Was machen denn Deine beiden Scripte?
Nehmen die sich die Textdatei sozusagen vor uns speichern sie dann neu ab mit UTF-8?
Ist es denn denkbar, dass das alles in einer einziges VBA-Script-Datei erfolgt.
Also das erstellen und abspeichern der Text-Datei mit UTF-8?
Oder ist das so letztendlich garnicht möglich.
Bitte entschuldige, wenn ich mich blöd anstelle.
Aber ich kann leider nur wirklich sehr weniog VBA:

Anzeige
AW: Nachtrag:
05.05.2014 18:28:41
mumpel
Du musst den Pfad+Dateinamen (steht in "Textfile") und den den Text ("ÄÖÜ" im Beispiel) übergeben. Das Ergebnis ist eine Textdatei in der Codierung "UTF 8 ohne BOM".

AW: Nachtrag:
05.05.2014 18:44:06
Ingo
OK. Habe ich das also so zu verstehen, dass das Script "Beispieldatei" sich meine Text-Date (die nicht UTF-8 ist) vornimmt und diese dann mittels des ersten von Dir gepostteten Codes in UTF-8 "wandelt" und dann wieder neu abspeichert? Oder ist das jetzt kompletter Unsinn, was ich hier schreibe?
Ich begreife noch nicht, wie quasi der Ablauf vonstatten zu gehen hat.
Bisher ist es bei mir ja so, wenn ich das richtig sehe:
* Mein Script holt sich die benötigten Werte aus der Excel-Tabelle.
* Dann erstellt das Script meine gewünschte Text-Date (HTML).
* Dann speichert mein Script diese auf der Festplatte mit dem gewünschten Dateinamen ab.
Wo bzw. wie kommen denn da jetzt Deine beiden gepostetetn Scripte ins Spiel?

Anzeige
AW: Nachtrag:
05.05.2014 19:59:32
mumpel
Solange es funktioniert ist es erstmal egal. Verstehen lernen kannst Du es ja später. :)

AW: Nachtrag:
05.05.2014 21:18:38
Ingo
Ja OK, ich hatte das mit dem Ablauf aber genau aus dem Grund gefragt, damit ich eben weis, wie ich das einsetzen7anwenden muss. Bisher bin ich damit leider immer noch überfordert.

AW: Nachtrag:
05.05.2014 21:39:37
mumpel
Das steht in meiner Antwort von 18:28:41. "Textfile" enthält Pfad und Dateiname, "ÄÖÜ" ist der zu übergebende Text. Die Prozedur "UTF8Output" erstellt die Datei in "UTF 8 ohne BOM", da musst Du auch nichts ändern.

AW: Nachtrag:
06.05.2014 11:35:01
Ingo
Ich habe mir das nochmal genau durchgelesen, stehe aber immer noch auf dem Schlauch.
Diese Zeile verstehe ich nicht:
Textfile = Environ("USERPROFILE") & "\Desktop\Test.txt"
Ist das der Pfad und Dateiname von der Text-Datei, die ich mit meinem Script erstellt habe, also der Quell-Pfad?
Oder ist das der Pfad und Dateiname der Datei, die Dein Script erstellt also der Ziel-Pfad?
Und auch, was Du mit "der zu übergebende Text" meinst, verstehe ich nicht.
Ich habe doch noch gar keinen fertigen zu übergebenen Text.
Ich versuche mein Anliegen nochmal genauer zu schildern, falls ich mich in meinem Ursprungsposting blöd ausgedrückt habe. Ich habe mal eine Text-Arbeitsmappe erstellt und diese hier im Forum hochgeladen:
https://www.herber.de/bbs/user/90512.xls
Darin befindet sich das Makro "Produkt_Seite".
Dieses Makro "erzeugt" aus den Werten der jeweils aktiven Tabellenzeile eine php-Datei und speichert diese unter D:/Temp ab.
So, und genau darum geht es mir.
Aktuell ist es so, dass diese Datei nicht UTF-8 codiert von dem Makro erstellt und gespeichert wird.
Und genau das möchte ich.
Das Makro soll also weiterhin aus den Werten der jeweils aktiven Tabellenzeile eine php-Datei "erzeugen" und abspeichern ... nur soll diese Datei dann UTF-8 codiert sein.
Hoffentlich ist das so hilfreicher von mir dargestellt.
Und hoffentlich wird es anhand der hochgeladenen Beispiel-Datei auch nochmal deutlicher.
Und wenn man mir da hilft, das hinzubekommen bzw. wenn man das für mich macht, würde ich auch gerne dafür bezahlen.

Anzeige
AW: Nachtrag:
06.05.2014 16:25:45
mumpel
Public bolAbbruch As Boolean

Sub Produkt_Seite()

Dim Inhalt  As String
Dim Pfad    As String

Rem Abbrechen bei Bedarf 
If bolAbbruch Then Exit Sub

Rem Pfad und Dateiname zusam 
Pfad = Environ("USERPROFILE") & "\Desktop\" & LCase(Range("BestNr").Cells(ActiveCell.Row)) & ".php"

Rem Dateiinhalt zusammenstellen 
    Inhalt = "<!DOCTYPE html>"
    Inhalt = Inhalt & ""
    Inhalt = Inhalt & "  <head>"
    Inhalt = Inhalt & "    <title>Webseiten-Titel</title>"
    Inhalt = Inhalt & "  </head>"
    Inhalt = Inhalt & ""
    Inhalt = Inhalt & "  <body>"
    Inhalt = Inhalt & ""
    Inhalt = Inhalt & "    <p>"
    Inhalt = Inhalt & "      Hersteller: " & Range("Hersteller").Cells(ActiveCell.Row) & "<br>"
    Inhalt = Inhalt & "      Material: " & Range("Material").Cells(ActiveCell.Row) & "<br>"
    Inhalt = Inhalt & "      Größe: " & Range("Größe").Cells(ActiveCell.Row) & "<br>"
    Inhalt = Inhalt & "      Bestell-Nr.: " & Range("BestNr").Cells(ActiveCell.Row)
    Inhalt = Inhalt & "    </p>"
    Inhalt = Inhalt & ""
    Inhalt = Inhalt & "  </body>"
    Inhalt = Inhalt & ""
    Inhalt = Inhalt & "</html>"


Rem PHP-Datei erstellen 
UTF8Output Pfad, Inhalt

End Sub


VBA/HTML - CodeConverter für Office-Foren
AddIn für Excel/Word 2000-2010 - komplett in VBA geschrieben von Lukas Mosimann
Projektbetreuung durch mumpel



Code erstellt und getestet in Office 15

Anzeige
Nachtrag
06.05.2014 16:31:46
mumpel
Datei nicht wohlgeformt. Da fehlt das öffnende "<html lang ="de">. ;)
Sub Produkt_Seite()

Dim Inhalt  As String
Dim Pfad    As String

Rem Abbrechen bei Bedarf 
If bolAbbruch Then Exit Sub

Rem Pfad und Dateiname zusam 
Pfad = Environ("USERPROFILE") & "\Desktop\" & LCase(Range("BestNr").Cells(ActiveCell.Row)) & ".php"

Rem Dateiinhalt zusammenstellen 
    Inhalt = "<!DOCTYPE html>"
    Inhalt = Inhalt & "<html lang=""de"">"
    Inhalt = Inhalt & ""
    Inhalt = Inhalt & "  <head>"
    Inhalt = Inhalt & "    <title>Webseiten-Titel</title>"
    Inhalt = Inhalt & "  </head>"
    Inhalt = Inhalt & ""
    Inhalt = Inhalt & "  <body>"
    Inhalt = Inhalt & ""
    Inhalt = Inhalt & "    <p>"
    Inhalt = Inhalt & "      Hersteller: " & Range("Hersteller").Cells(ActiveCell.Row) & "<br>"
    Inhalt = Inhalt & "      Material: " & Range("Material").Cells(ActiveCell.Row) & "<br>"
    Inhalt = Inhalt & "      Größe: " & Range("Größe").Cells(ActiveCell.Row) & "<br>"
    Inhalt = Inhalt & "      Bestell-Nr.: " & Range("BestNr").Cells(ActiveCell.Row)
    Inhalt = Inhalt & "    </p>"
    Inhalt = Inhalt & ""
    Inhalt = Inhalt & "  </body>"
    Inhalt = Inhalt & ""
    Inhalt = Inhalt & "</html>"


Rem PHP-Datei erstellen 
UTF8Output Pfad, Inhalt

End Sub


VBA/HTML - CodeConverter für Office-Foren
AddIn für Excel/Word 2000-2010 - komplett in VBA geschrieben von Lukas Mosimann
Projektbetreuung durch mumpel



Code erstellt und getestet in Office 15

Anzeige
AW: Nachtrag:
06.05.2014 18:45:53
Ingo
Oh ja super.
Nun habe ich es doch tatsächlich verstanden, wie ich das benutzen soll/muss.
Vielen lieben Dank.

AW: Nachtrag:
06.05.2014 19:00:57
Ingo
Da wird ja meine Webseite quasi in die Variable "Inhalt" geschrieben.
Gibt es eine Obergrenze, wie viel da in diese Variable hineingeschrieben werden darf?
Ich frage, weil mein Beispiel ja gekürzt war.
Die tatsächlichen Webseiten sind deutlich länger, haben also deutlich mehr Quellcode.
Passt das denn alles in so eine Variable hinein?

AW: Nachtrag:
06.05.2014 19:40:16
mumpel
Die genaue Grenze kenne ich nicht. Aber ich benutze diese Methode in einen meiner Tools. Und da kann der zu übergebende Inhalt schon mal über 1 MB betragen (gerade getestet, 1,09 MB).

Anzeige
Nachtrag - Tipp
06.05.2014 19:47:39
mumpel
Vielleicht solltest Du über "dynamic Content" nachdenken. Also eine Hauptseite, und das was Du da in Excel erstellst als dynamischen Inhalt verfügbar machen. Habe ich auf meiner Webseite so gemacht. Da habe ich nurnoch eine Hauptseite. Der Inhalt selber steht in Textdateien und wird per PHP und Javascript in die Seite geladen. Du kannst natürlich auch mit CMS (Content Managment System) arbeiten. Damit hättest Du dann weniger in die Datei(en) zu schreiben.

AW: Nachtrag - Tipp
06.05.2014 20:14:38
Ingo
Ja, ober sowas habe ich auch schon mal nachgedacht.
Aber gerade heute finde ich es auch irgendwie coll, tatsächlich noch statische Webseiten zu haben.

Anzeige
AW: Nachtrag - Tipp
06.05.2014 20:26:29
mumpel
Aber irgendwann wirst Du den Überblick verlieren, und der Speicherplatz auf Deinem Webspace nicht mehr reichen. Je kleiner die Dateien um so besser. Und regelmäßig das löschen was Du nicht mehr benötigst.
Dynamische Inhalte haben aber den Vorteil dass Du weniger Arbeit hast. Ich hatte "früher" auch mal statische Seiten. Mein Workshop z.B. Aber jetzt ist der auf 34 Teile angewachsen. Und bei sovielen Seiten jedes mal das Menü anpassen wenn ich einen neuen Teil im Workshop einbaue ist nicht gerade einfach. Da macht CMS bzw. dynamischer Content durchaus Sinn. Da muss ich nur eine neue Datei erstellen und die Datei mit dem Menü anpassen. ;)

AW: Nachtrag:
06.05.2014 20:13:41
Ingo
Ah super. das reicht lang und fettig hier :)

AW: Nachtrag:
06.05.2014 20:37:35
mumpel
Diesbezüglich noch eine Anmerkung:
Der RAM spielt auch eine wichtige Rolle, die Rechnergeschwindigleit sowieso. Je langsamer umso länger dauert das Erstellen der Datei.
Und Deine Officeversion ist auch nicht mehr die jüngste, die hat schon Ur-Ur-Enkel. ;-)

AW: Nachtrag:
07.05.2014 15:34:08
Ingo
Ich habe heute schon viel mit Deiner Lösung experimentiert.
Und es kjlappt alles ganz ganz hervorragend!
Ich bin wirklich sehr glücklich darüber!!!

AW: Thread-Entwicklung wie hier ?
05.05.2014 18:55:56
Ingo
Ja da hast Du natürlich Recht und ich bitte auch um Entschuldigung dafür.
Das Blöde ist eben, dass ich doch ein echter Laie mit VBA bin.
Ob sich evtl. hier jemand finden lässt, der mir das mit dem UTF-8 Problem erstellt?
Ich würde dafür natürlich auch etwas bezahlen.

Tja, warum willst du den 2. vor dem 1.Schritt ...
05.05.2014 19:33:28
Luc:-?
…tun, Ingo,
und „bäckst nicht erstmal kleinere Brötchen“ wie es auch für einen Bäckerlehrling normal wäre, denn der versucht sich auch nicht gleich an Torten?! ;-)
Auch eine PgmierSprache wie VBA kann/muss man lernen, wenn man Erfolg haben will; der (angeblich) „gesunde Menschenverstand“ reicht da oft nicht aus (ähnlich wie bei anderen Fachsprachen auch, denn ein Großteil ihrer Sprachmittel besteht aus Konventionen, die man einfach kennen muss).
Gruß Luc :-?

AW: Tja, warum willst du den 2. vor dem 1.Schritt ...
05.05.2014 19:45:02
Ingo
Jo, da stimme ich Dir natürlich zu.
Und es ist natürlich auch schon recht frech, in so einem netten Forum wie diesem hier, einfach lauter Hilfe in Anspruch zu nehmen und sich alles fertig stricken zu lassen.
Vor Allem, wenn man z.B. von VBA im Grunde kaum Ahnung hat, so wie ich eben.
Normalerweise würde ich mir ja auch in Ruihe Zeit lassen, um mich tiefer in VBA einzuarbeiten.
Learning by Doing sozusagen. Fand ich schon immer gut.
Nur ist es bei meinem Anliegen eher so, dass ich garnicht so wirklich das Ziel habe, ein VBA Fachmann zu werden. Ich habe eher ein paar ganz spezielle Anliegen, die ich umsetzen möchte.
Wenn das dann getan ist, habe ich eigentlich auch garkeine weiteren Bedarf an VBA.
Verstehst Du, wie ich das meine?
Miot meiner Frage im Ursprungsposting habe ich mich wohl ganz klar überschätzt mit dem Anliegen, das doch mit etwas Hilfe selber hinzubekommen.
Da ist es wohl doch sinnvoller, wenn ich versuche jemanden zu finden, der solche Programmierungen gegen Bezahlung macht.
Ist es denn hier im Forum auch möglich so jemanden zu finden?

AW: Tja, warum willst du den 2. vor dem 1.Schritt ...
05.05.2014 21:16:52
mumpel

Zitat:
[...] Ist es denn hier im Forum auch möglich so jemanden zu finden [...]
____________________________
Quelle: Herber-Forum


Wieviel möchtest Du denn ausgeben? Unter 40,- Euro Netto wirst Du nichts bekommen. Excel Inside Solutions.

Ja, zB der Chef selber, ansonsten schau mal ...
05.05.2014 21:23:06
Luc:-?
…unter PROFILE nach, Ingo!
Luc :-?

AW: Ja, zB der Chef selber, ansonsten schau mal ...
06.05.2014 06:53:46
Ingo
Ah OK prima.
Ich habe es gerade auch erst auf der Startseite gesehen, dass der Chef ja selber sowas auch anbietet.
Dem werde ich mal schreiben und um ein Angebot bitten.

183 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige