4 Stimmen

Umwandlung von HTML- in Excel-Formatierung - Umbruch und li in derselben Zelle

Ich habe Anfang der Woche eine Frage zur Konvertierung von HTML in Excel gestellt, die bei mir gut funktioniert hat. Der Beispielmakrocode, der mir zur Verfügung gestellt wurde, leistete gute Arbeit bei der Konvertierung des Codes vom HTML-Format in eine Excel-Zelle (danke Siddharth Rout!). Das Problem, auf das ich jetzt stoße und für das ich nirgendwo eine Antwort finden kann, hat damit zu tun, wie das IE-Objekt Absätze, Umbrüche und Listenelemente in Excel behandelt. p, br und li verschieben den Text in Zellen unterhalb der Ursprungszelle und überschreiben alle Daten, die sich in diesen Zellen befanden. Gibt es eine Möglichkeit, den HTML-Block in nur einer Zelle anzuzeigen (d. h. jedes neue Zeilentag würde nur eine neue Zeile in derselben Zelle erzeugen)?

VBA-Code

Sub Sample()
    Dim Ie As Object

    Set Ie = CreateObject("InternetExplorer.Application")

    With Ie
        .Visible = False

        .Navigate "about:blank"

        .document.body.InnerHTML = Sheets("Sheet1").Range("A1").Value

        .document.body.createtextrange.execCommand "Copy"
        ActiveSheet.Paste Destination:=Sheets("Sheet1").Range("A1")

        .Quit
    End With
End Sub

Beispiel-HTML

<p>  Here are some possible uses:</p>  <ul>  <li><font color = "red"> syntax highlighting code snippets</font></li>  <li style ="font-weight:bold; color: orange">validating credit card numbers, phone numbers, and zip codes</li>  <li style = "font-style: italic">styling email addresses and tags</li>  </ul>  

Beispielhafte Ausgabe die in mehreren Zeilen angezeigt wird (möchte in einer Zelle in mehreren Zeilen angezeigt werden - ähnlich wie bei der Funktion von Umschalt+Eingabe)

Here are some possible uses:

syntax highlighting code snippets

**validating credit card numbers, phone numbers, and zip codes**

*styling email addresses and tags*

1voto

Siddharth Rout Punkte 143513

Ich bin nicht sicher, ob Sie das tun können ( Ich könnte falsch liegen ). Aber wenn es nur ein Problem ist, dass Ihre Daten überschrieben werden, dann gibt es eine Alternative :)

LOGIK: Anstatt sie in dasselbe Blatt einzufügen, fügen Sie sie in ein temporäres Blatt ein und kopieren dann die Zeilen und einfügen. sie in Blatt1, damit Ihre Daten nicht überschrieben werden. Siehe Schnappschuss.

SNAPSHOT:

enter image description here

CODE:

Sub Sample()
    Dim ws As Worksheet, wstemp As Worksheet
    Dim Ie As Object
    Dim LastRow As Long

    Set Ie = CreateObject("InternetExplorer.Application")

    Set ws = Sheets("Sheet1")

    '~~> Create Temp Sheet
    Set wstemp = Sheets.Add

    With Ie
        .Visible = True

        .Navigate "about:blank"

        '~~> I am assuming that the data is in Cell A1
        .document.body.InnerHTML = ws.Range("A1").Value

        '~~> Deleting the row which had the html string. I am assuming that it was in Row 1
        ws.Rows(1).Delete

        .document.body.createtextrange.execCommand "Copy"
        wstemp.Paste Destination:=wstemp.Range("A1")

        '~~> Find the last row in the temp sheet
        LastRow = wstemp.Cells.Find(What:="*", After:=wstemp.Range("A1"), SearchOrder:=xlByRows, SearchDirection:=xlPrevious).Row

        '~~> Copy that data
        wstemp.Rows("1:" & LastRow).Copy

        '~~> insert it in Sheet1
        ws.Rows(1).Insert Shift:=xlDown

        .Quit
    End With

    '~~> Delete Temp sheet
    Application.DisplayAlerts = False
    wstemp.Delete
    Application.DisplayAlerts = True

End Sub

HTH

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X