Ich habe einen anderen Ansatz als den von mnmnc verfolgt.
Meine Versuche, ein Test-Word-Dokument als HTML zu speichern, waren nicht erfolgreich. Ich habe in der Vergangenheit festgestellt, dass von Office generiertes HTML so voller Spreu ist, dass es nahezu unmöglich ist, die gewünschten Elemente auszuwählen. Ich habe festgestellt, dass dies hier der Fall ist. Ich hatte auch ein Problem mit Gleichungen. Word speichert Gleichungen als Bilder. Für jede Gleichung gibt es zwei Bilder, eines mit einer Erweiterung von WMZ und eines mit einer Erweiterung von GIF. Wenn Sie die HTML-Datei mit Google Chrome anzeigen, sehen die Gleichungen OK aus, sind aber nicht besonders gut. Die Darstellung entspricht der GIF-Datei, wenn sie mit einem Bildanzeige- / Bearbeitungswerkzeug angezeigt wird, das transparente Bilder verarbeiten kann. Wenn Sie die HTML-Datei mit dem Internet Explorer anzeigen, sehen die Gleichungen perfekt aus.
Zusätzliche Information
Ich hätte diese Information in die ursprüngliche Antwort aufnehmen sollen.
Ich habe ein kleines Word-Dokument erstellt, das ich als HTML gespeichert habe. Die drei Bereiche im Bild unten zeigen das ursprüngliche Word-Dokument, das HTML-Dokument, wie es von Microsoft Internet Explorer angezeigt wird, und das HTML-Dokument, wie es von Google Chrome angezeigt wird.
Wie bereits erläutert, ist der Unterschied zwischen den IE- und Chrome-Bildern darauf zurückzuführen, dass die Gleichungen zweimal gespeichert wurden, einmal im WMZ-Format und einmal im GIF-Format. Das HTML ist zu groß, um es hier anzuzeigen.
Das vom Makro erzeugte HTML ist:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Frameset//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-frameset.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head><meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
</head><body>
<p>Some ordinary text.</p>
<p>H<sub>2</sub>SO<sub>4</sub>.</p>
<p>Abc & def > ghi < jkl</p>
<p>x<sup>3</sup>+ x<sup>2</sup>+3x+4=0.</p><p></p>
<p><i>Equation</i> </p>
<p>Mno</p>
<p><i>Equation</i></p>
</body></html>
Welche zeigt als:
Ich habe nicht versucht, die Gleichungen zu konvertieren, da das kostenlose MathType Software Development Kit anscheinend Routinen enthält, die in LaTex konvertiert werden
Der Code ist ziemlich einfach, also nicht viele Kommentare. Fragen Sie, ob etwas unklar ist. Hinweis: Dies ist eine verbesserte Version des Originalcodes.
Sub ConvertToHtml()
Dim FileNum As Long
Dim NumPendingCR As Long
Dim objChr As Object
Dim PathCrnt As String
Dim rng As Word.Range
Dim WithinPara As Boolean
Dim WithinSuper As Boolean
Dim WithinSub As Boolean
FileNum = FreeFile
PathCrnt = ActiveDocument.Path
Open PathCrnt & "\TestWord.html" For Output Access Write Lock Write As #FileNum
Print #FileNum, "<!DOCTYPE html PUBLIC ""-//W3C//DTD XHTML 1.0 Frameset//EN""" & _
" ""http://www.w3.org/TR/xhtml1/DTD/xhtml1-frameset.dtd"">" & _
vbCr & vbLf & "<html xmlns=""http://www.w3.org/1999/xhtml"" " & _
"xml:lang=""en"" lang=""en"">" & vbCr & vbLf & _
"<head><meta http-equiv=""Content-Type"" content=""text/html; " _
& "charset=utf-8"" />" & vbCr & vbLf & "</head><body>"
For Each rng In ActiveDocument.StoryRanges
NumPendingCR = 0
WithinPara = False
WithinSub = False
WithinSuper = False
Do While Not (rng Is Nothing)
For Each objChr In rng.Characters
If objChr.Font.Superscript Then
If Not WithinSuper Then
' Start of superscript
Print #FileNum, "<sup>";
WithinSuper = True
End If
ElseIf WithinSuper Then
' End of superscript
Print #FileNum, "</sup>";
WithinSuper = False
End If
If objChr.Font.Subscript Then
If Not WithinSub Then
' Start of subscript
Print #FileNum, "<sub>";
WithinSub = True
End If
ElseIf WithinSub Then
' End of subscript
Print #FileNum, "</sub>";
WithinSub = False
End If
Select Case objChr
Case vbCr
NumPendingCR = NumPendingCR + 1
Case "&"
Print #FileNum, CheckPara(NumPendingCR, WithinPara) & "&";
Case "<"
Print #FileNum, CheckPara(NumPendingCR, WithinPara) & "<";
Case ">"
Print #FileNum, CheckPara(NumPendingCR, WithinPara) & ">";
Case Chr(1)
Print #FileNum, CheckPara(NumPendingCR, WithinPara) & "<i>Equation</i>";
Case Else
Print #FileNum, CheckPara(NumPendingCR, WithinPara) & objChr;
End Select
Next
Set rng = rng.NextStoryRange
Loop
Next
If WithinPara Then
Print #FileNum, "</p>";
withpara = False
End If
Print #FileNum, vbCr & vbLf & "</body></html>"
Close FileNum
End Sub
Function CheckPara(ByRef NumPendingCR As Long, _
ByRef WithinPara As Boolean) As String
' Have a character to output. Check paragraph status, return
' necessary commands and adjust NumPendingCR and WithinPara.
Dim RtnValue As String
RtnValue = ""
If NumPendingCR = 0 Then
If Not WithinPara Then
CheckPara = "<p>"
WithinPara = True
Else
CheckPara = ""
End If
Exit Function
End If
If WithinPara And (NumPendingCR > 0) Then
' Terminate paragraph
RtnValue = "</p>"
NumPendingCR = NumPendingCR - 1
WithinPara = False
End If
Do While NumPendingCR > 1
' Replace each pair of CRs with an empty paragraph
RtnValue = RtnValue & "<p></p>"
NumPendingCR = NumPendingCR - 2
Loop
RtnValue = RtnValue & vbCr & vbLf & "<p>"
WithinPara = True
NumPendingCR = 0
CheckPara = RtnValue
End Function