Live-Forum - Die aktuellen Beiträge
Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

Zelle als HTML | Herbers Excel-Forum

Forumthread: Zelle als HTML

Zelle als HTML
22.01.2010 19:10:10
Rene

Hallo Zusammen,
ich habe eine Frage.
Ich möchte eine einzelne Zelle samt Inhalt UND allen Formaten in HTML umwandeln und in den HTML-Code in einer Variablen speichern. geht das?
Bisland habe ich folgendes versucht:
With ActiveWorkbook.PublishObjects.Add(xlSourceRange, _
"C:\Users\Benutzer\Desktop\Mappe1.htm", "Tabelle1", "$E$12", xlHtmlStatic _
, "Mappe1_16679", "")
.Publish (True)
.AutoRepublish = False
End With
So bekomme ich aber nur eine Datei. Die ist zwar vom Ergebnis her schon ganz gut, aber ich will ja nicht immer wieder Dateien anlegen, auslesen und wieder löschen.
Hintergrund ist: Ich möchte die werte aus der Excel-Liste holen, mit allen Formaten in HTML umwandeln und dann in einer Oracle-DB speichern. Und bisher speichere ich die Werte nur ohne Formate...
Kann mir jemand helfen?
Ansonsten schönes WE!
Grüße
René

Anzeige

13
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: excel-jeanie
23.01.2010 12:35:48
Rene
Halo Tino,
danke für den Tipp, aber eine Lösung, bei der auf jedem Benutzer-Rechner ein nicht freigegebenes AddIn installieren muss, ist leider nicht möglich.
Grüße
René
Anzeige
AW: Zelle als HTML
22.01.2010 20:04:52
Josef Ehrensberger
Hallo René,
das ist aber der einfachste Weg.
Das lässt sich ganz bequem als Funktion nutzen.
Schau auf diese Seite http://www.rondebruin.nl/mail/folder3/mail4.htm
Da findest du die Funktion RangeToHTML, du gibst einfach den Bereich an
und erhälst als Rückgabewert den HTML-String.
Gruß Sepp
Anzeige
AW: Zelle als HTML
23.01.2010 12:01:52
Rene
Hallo Sepp,
dank Dir für den Tipp. Das ist schon ganz gut, aber zum einen entsteht da ein wirklich mächter Codeblock für ein paar wenige Zeilen Inhalt. Zum anderen werden Formate, die sich innerhalb der Zelle ändern nicht erkannt.
Ich dachte beim HTML eher an sowas (ohne CSS):
<font color="RED">roter Text1 </font color><font color="BLUE"><b>Dicker blauer Text </b>dünner blauer Text</font color>
Geht das generisch oder muss ich wirklich jede Zelle einzeln parsen???
Grüße
René
Anzeige
AW: Zelle als HTML
23.01.2010 13:04:12
Josef Ehrensberger
Hallo René,
ja dann musst du wohl selber eine Code dafür schreiben, der die von dir gewünschten Infos
ausliest und entsprechend in HTML umsetzt.
Ich kann dir dabei helfen, wenn du genau beschreibst, welche Informationen ausgelesen
werden sollen.
Gruß Sepp
AW: Zelle als HTML
23.01.2010 13:16:12
Rene
Hallo Sepp,
das ist doch mal ein Angebot! :-)
Also es geht darum:
ich möchte aus einer Zelle die Inhalte incl. aller Formate in einer Oracle-DB speichern.
Bisher speichere ich nur den Text in der DB.
Jetzt möchte ich aber noch die Formate des Textes speichern und zwar in HTML und ohne CSS.
Wenn nun also der Text fett ist dann soll ein html-Tag für fett davor, ebenso für die Schriftfarbe, für kursiv, Zeilenumbrüche usw.
Ich stelle mir das so vor wie in meinem Beitrag zuvor. Und ich habe die idealistische Vorstellung, dass sowas generisch gehen könnte.
Wenn ich etwa eine einzelne Zelle aus Excel herauskopiere und bspw. in Expression Web einfüge, dann wird die Zelle mit genau der exakten Formatierung, die in Excel vorliegt (also auch mehrere Schriftfarben pro Zelle) übernommen.
Also grundsätzlich scheint das ja über die Zwischenablage zu gehen, aber wie...?
Ich würde also nicht nur den Text übernehmen, sondern vorne, zwischendrin und hinten jeweils die html-Tags dazupacken und das Ganze dann eben als String (im Oracle bisher als varchar2, wenn zu lang wird dann vielleicht als BLOB) abspeichern.
Hast du da einen Ansatz, wie ich nicht jedes einzelne Zeichen parsen muss?
Grüße
René
Anzeige
AW: Zelle als HTML
23.01.2010 14:53:19
Josef Ehrensberger
Hallo Renè,
also ohne jedes Zeichen einzeln zu parsen sehe ich da keinen Weg.
Gruß Sepp
Das sehe ich fast genauso,...
23.01.2010 17:01:07
Luc:-?
...René & Sepp,
denn ich musste das auch so machen!
Ist dir eigentlich klar, René,
was das für ein riesiger Arbeitsaufwand ist, alle möglichen Zellformate mit HTML abzubilden? Ich arbeite daran schon seit Monaten und finde immer noch Formate, die nicht 100%ig wiedergegeben wdn...
Wenn du da 'n paar Spezialisten unter den Usern hast, wird das Ganze richtig aufwendig. Außerdem ist es ein Unterschied, ob du wirklich alle Formate oder nur die aktuell wirksamen in HTML codieren willst. Nur Letzteres würde nämlich in HTML Sinn machen, falls das auch angwendet wdn soll. Das ganze Format kann man dann ja anderweitig bzw separat in Teilen dokumentieren.
Zuerst solltest du also genau wissen, wofür es gebraucht wird, was dazu erforderlich ist und wie das organisiert wdn soll. Dann benötigst du Routinen, die dir ein Zellformat in der erforderlichen Detailliertheit exakt wiedergeben können. Erst zum Schluss kommt HTML ins Spiel. Da musst du dir dann überlegen wie du xl/vbBezeichnungen in HTML-Bezeichnungen überträgst. Nicht alle xlFormatierungen sind HTML-kompatibel bzw -übersetzbar, da musst du dann Entscheidungen treffen...
Ich bin jedenfalls auf 12 Format-Hptpkte gekommen — unter xl12 könnten es noch mehr wdn.
Nehmen wir mal dein Bsp mit den verschieden Textfarben in einer Zelle...
Eine Zelle kann ein intern bedingtes Format enthalten, mit dem man schon vor xl12 4 verschiedene Farben inhaltsabhängig für die ganze Zelle festlegen konnte. Eine 5.Farbe kann man primär einstellen, die wird dann bei Fehlerwerten wirksam. Das Primat hat aber die (extern) bedingte Formatierung zu der jeweils erfüllten Bedingung. Das waren vor xl12 nur 3, können nun aber sehr viele sein. Die müssen alle abgeprüft wdn, wenn du einen HTML-Code willst, der den aktuellen Realzustand darstellt. Jetzt gab es bisher noch interessante Nebeneffekte. Ist der Zellinhalt bspw 2farbiger Text, musst du das zeichenweise prüfen, weil das Ergebnis für den gesamten Text in diesem Fall stets Null ist. Also, ist IsNull(...Font.ColorIndex) Wahr, musst du Einzelzeichen prüfen sonst nicht. Hast du ein intern bedingtes Format mit einer Farbe für Text vereinbart, also z.b. 0;-0;0;[Rot]@ wird der ganze Text stets rot, auch wenn er eigentlich 2farbig ist (nimmst du die nämlich wieder weg, ist er wieder 2farbig!). Hast du aber eine (extern) bedingte Formatierung mit erfüllter Bedingung =ISTTEXT(...) und Blau darauf zu liegen, hat die das Primat und es wird nur der 1.Teil des 2farbigen Textes Blau, der Rest behält die ursprgl Farbe(n). Hast du aber außerdem noch eine intern bedingte Farbe für Text vereinbart (hier [Rot]@), wird der ganze Text bei erfüllter externer Bedingung Blau...
Wenn das unter xl12 immer noch so ist, bilde das mal mit HTML nach...!
Viel Spaß ihr beiden beim Werkeln, aber vorerst mal schöSo!
Gruß Luc :-?
Anzeige
AW: Das sehe ich fast genauso,...
23.01.2010 17:37:41
Rene
Hallo Luc.
Also mir würde im Grunde auch schon Schriftfarbe (ohne Bed. Formatierung), Fettschrift und Zeilenumbruch reichen.
Aber Zelle für Zelle und Zeichen für Zeichen finde ich halt schon etwas aufwändig.
Zumal das auch mächtige Laufzeiten produzieren kann.
In den Listen, die ich verarbeite können das mehrer 10.000 Zellen sein...
Grüße
René
Anzeige
AW: Das sehe ich fast genauso,...
23.01.2010 18:47:37
Josef Ehrensberger
Hallo René,
dann sollte das genügen, den Rest kannst du sicher selber anpassen.
' **********************************************************************
' Modul: Modul1 Typ: Allgemeines Modul
' **********************************************************************

Option Explicit

Sub test()
  MsgBox RangeHTML(Range("A1:F100"))
End Sub

Private Function RangeHTML(Source As Range) As String
  Dim rngRow As Range, rng As Range
  Dim strTmp As String, strText As String
  Dim vntRowColor As Variant
  
  strTmp = "<table border=0>"
  
  For Each rngRow In Source.Rows
    vntRowColor = rngRow.Font.Color
    If VarType(vntRowColor) = vbNull Then
      strTmp = strTmp & "<tr height=" & Fix(rngRow.RowHeight) & "px>"
    Else
      strTmp = strTmp & "<tr height=" & Fix(rngRow.RowHeight) & "px color=" & HTMLColor(vntRowColor) & ">"
    End If
    For Each rng In rngRow.Cells
      strText = Replace(rng.Text, vbLf, "<br>")
      strTmp = strTmp & "<td width=" & Fix(rng.Width) & "px>"
      If VarType(vntRowColor) = vbNull Then
        strTmp = strTmp & "<font color=" & HTMLColor(rng.Font.Color) & ">"
      End If
      If rng.Font.Bold Then
        strTmp = strTmp & "<b>" & strText & "</b>"
      Else
        strTmp = strTmp & strText
      End If
      If VarType(vntRowColor) = vbNull Then
        strTmp = strTmp & "</font>"
      End If
      strTmp = strTmp & "</td>"
    Next
    strTmp = strTmp & "</tr>"
  Next
  
  strTmp = strTmp & "</table>"
  
  RangeHTML = strTmp
End Function

Private Function HTMLColor(ByVal Color As Long) As String
  Dim R As Integer, G As Integer, B As Integer
  Dim strR As String * 2, strG As String * 2, strB As String * 2
  
  
  R = Color And 255
  G = (Color \ 256) And 255
  B = Color \ 65536
  
  strR = Hex(R) & "00"
  strG = Hex(G) & "00"
  strB = Hex(B) & "00"
  HTMLColor = "#" & strR & strG & strB
End Function

Gruß Sepp
Anzeige
AW: Das sehe ich fast genauso,...
23.01.2010 18:56:53
Rene
Hallo Sepp,
das sieht schon mal super aus! :-) Danke!!!
Ich werde jetzt noch den Fall implementieren, dass in einer Zelle mehrere Farben vorkommen können.
Ebenso werde ich versuchen Fettschrift und kursiv abzufangen.
Ich dank Dir wirklich!
Grüße
René
Na viel Glück! Ahnst du viell, was da auf...
23.01.2010 20:22:16
Luc:-?
...dich zukommt, René,
wenn du wirklich mehrere Farben pro Zelle feststellen willst...? Ich habe dazu jedenfalls nicht nur ein paar Codezeilen, sondern ein ganzes udFktssystem mit 100en Zeilen gebraucht. Aber so hoch sind deine Ansprüche ja noch nicht — kommt aber noch... ;-)
Naja, viel Spaß!
Luc :-?
Anzeige
Ja, dann,...
23.01.2010 20:04:48
Luc:-?
...René...
1. Schriftfarbe (ohne intern und extern bedingte Formatierung):
1.1 Auslesen mit sfb = Cells(..., ...).Font.Color
1.2 If IsNull(sfb) Then → zeichenweiser Vgl mit ...Characters(p, 1).Font.Color und entweder merken mit p (Position) oder nur die verschiedenen Farben sammeln.
1.3 Sonst hast du die Farbe für den ganzen Text, die aber in beiden Fällen nicht unbedingt mit der sichtbaren übereinstimmt!
1.4 Umwandeln in Hexadezimal mit sfx = Right("00000" & Hex(sfb), 6) und dann noch die ersten beiden Stellen mit den letzten beiden tauschen, damit aus BGR RGB wird und # davorsetzen.
1.5 Umwandeln in HTML: sfh = "<font color=" & sfx & ">" & zelltext & "</font>
2. Fettschrift:
2.1 Auslesen mit sff = Cells(..., ...).Font.Bold (True/False) bzw ...Font.FontStyle, da ist dann auch noch kursiv (Italic) mit dabei.
2.2 Wenn nur Textteile fett sind, ist zumindest eine dieser Eigenschaften Null, so dass man auch hier daran die zeichenweise Durchsuchung festmachen kann. Falls das zu aufwendig wird, muss eben stets nur das 1.Zeichen geprüft wdn — ...Characters(1, 1)... Dann sollte es kein Null geben.
2.3 Umwandeln in HTML bei True wie bekannt als <b>...</b> oder moderner als <strong>...</strong>
3. Zeilenumbruch:
Das ist so 'ne Sache, denn normalerweise gibt's keinen in einer Zelle. Wenn man ihn einstellt, wird automatisch an bestimmten Stellen (meist nur Leerzeichen) umgebrochen. Wenn man diese Einstellung abfragt, weiß man nur, dass umgebrochen wdn soll. Ob und wo das tatsächlich passiert ist so nicht feststellbar, auch nicht mit Cells(..., ...).Text! Was anderes wäre es, wenn absolute Zeilenumbrüche enthalten sind — nach denen könnte man suchen — Chr(10) vbLf bzw Chr(13) vbCrLf. Das entspräche in HTML <br>. Anderenfalls muss die Spaltenbreite mit Textlänge, Schriftart und -größe korreliert wdn.
4. Umwandeln in HTML mit dem Zelltext insgesamt nur am 1.Zeichen orientiert:
With Cells(..., ...).Characters(1, 1).Font
sfg = "<font size=" & .Size & "pt color=" & sfh & ">" & _
IIf(.Bold, "<b>", "") & Cells(..., ...) & IIf(.Bold, _
"</b>", "") & "</font>"
End With
So, nun mach was draus...! ;-)
Gruß+schöSo, Luc :-?
Anzeige
;

Forumthreads zu verwandten Themen

Anzeige
Anzeige
Anzeige
Anzeige
Entdecke relevante Threads

Schau dir verwandte Threads basierend auf dem aktuellen Thema an

Alle relevanten Threads mit Inhaltsvorschau entdecken
Anzeige

Infobox / Tutorial

Zelle als HTML umwandeln in Excel


Schritt-für-Schritt-Anleitung

  1. Öffne die VBA-Entwicklungsumgebung: Drücke ALT + F11, um den VBA-Editor zu öffnen.

  2. Erstelle ein neues Modul: Klicke im Projekt-Explorer mit der rechten Maustaste auf dein Projekt und wähle Einfügen > Modul.

  3. Füge den folgenden Code ein: Dieser Code wandelt den Text einer Zelle in HTML um.

    Option Explicit
    
    Sub test()
       MsgBox RangeHTML(Range("E12"))
    End Sub
    
    Private Function RangeHTML(Source As Range) As String
       Dim rngRow As Range, rng As Range
       Dim strTmp As String, strText As String
       Dim vntRowColor As Variant
    
       strTmp = "<table border=0>"
    
       For Each rngRow In Source.Rows
           vntRowColor = rngRow.Font.Color
           If VarType(vntRowColor) = vbNull Then
               strTmp = strTmp & "<tr height=" & Fix(rngRow.RowHeight) & "px>"
           Else
               strTmp = strTmp & "<tr height=" & Fix(rngRow.RowHeight) & "px color=" & HTMLColor(vntRowColor) & ">"
           End If
           For Each rng In rngRow.Cells
               strText = Replace(rng.Text, vbLf, "<br>")
               strTmp = strTmp & "<td width=" & Fix(rng.Width) & "px>"
               If VarType(vntRowColor) = vbNull Then
                   strTmp = strTmp & "<font color=" & HTMLColor(rng.Font.Color) & ">"
               End If
               If rng.Font.Bold Then
                   strTmp = strTmp & "<b>" & strText & "</b>"
               Else
                   strTmp = strTmp & strText
               End If
               If VarType(vntRowColor) = vbNull Then
                   strTmp = strTmp & "</font>"
               End If
               strTmp = strTmp & "</td>"
           Next
           strTmp = strTmp & "</tr>"
       Next
    
       strTmp = strTmp & "</table>"
       RangeHTML = strTmp
    End Function
    
    Private Function HTMLColor(ByVal Color As Long) As String
       Dim R As Integer, G As Integer, B As Integer
       R = Color And 255
       G = (Color \ 256) And 255
       B = Color \ 65536
       HTMLColor = "#" & Right("00" & Hex(R), 2) & Right("00" & Hex(G), 2) & Right("00" & Hex(B), 2)
    End Function
  4. Führe das Makro aus: Drücke F5, während der Cursor in der test-Subroutine steht. Das Ergebnis wird in einem Dialogfeld angezeigt.


Häufige Fehler und Lösungen

  • Fehler: "Typen unverträglich"

    • Lösung: Überprüfe, ob die Daten in der Zelle korrekt formatiert sind. Manchmal können leere Zellen oder nicht unterstützte Datentypen diesen Fehler verursachen.
  • Fehler: "Makro konnte nicht gefunden werden"

    • Lösung: Stelle sicher, dass das Makro in einem Modul gespeichert ist und dass Du die richtige Subroutine aufrufst.

Alternative Methoden

  1. Excel HTML in Text umwandeln: Eine einfache Methode besteht darin, die Zelle zu kopieren und in einem HTML-Editor einzufügen. Das formatiert den Text automatisch.

  2. Add-Ins verwenden: Es gibt verschiedene Add-Ins, die speziell für das Umwandeln von Excel-Daten in HTML entwickelt wurden. Suche nach einem, das deinen Anforderungen entspricht.


Praktische Beispiele

  • Um eine Excel-Tabelle in HTML umzuwandeln, kannst Du die oben beschriebene Methode verwenden oder den Excel-Befehl "Speichern unter" und dann das Format "Webseite" wählen.

  • Wenn Du eine einzelne Zelle in HTML darstellen möchtest, nutze die Funktion RangeHTML, um nur diesen Bereich zu konvertieren.


Tipps für Profis

  • Verwende Formatierung: Achte darauf, dass Du beim Umwandeln von Excel in HTML auch die richtigen HTML-Tags für Formatierungen wie Fett (<b>), Kursiv (<i>) und Zeilenumbrüche (<br>) verwendest.

  • Optimierung des Codes: Bei großen Datenmengen kann der VBA-Code optimiert werden, um die Laufzeit zu reduzieren. Vermeide unnötige Schleifen und nutze Arrays, wenn möglich.


FAQ: Häufige Fragen

1. Wie kann ich HTML in Excel anzeigen? Du kannst HTML in Excel anzeigen, indem Du den HTML-Code in eine Zelle einfügst und die Zelle dann mit einer Formel verknüpfst, die den HTML-Code interpretiert.

2. Ist es möglich, eine Excel-Tabelle direkt als HTML-Datei zu speichern? Ja, Du kannst eine Excel-Tabelle als HTML speichern, indem Du "Speichern unter" wählst und das Format "Webseite" auswählst.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Entdecke mehr
Finde genau, was du suchst

Die erweiterte Suchfunktion hilft dir, gezielt die besten Antworten zu finden

Suche nach den besten Antworten
Unsere beliebtesten Threads

Entdecke unsere meistgeklickten Beiträge in der Google Suche

Top 100 Threads jetzt ansehen
Anzeige