Итак, может быть, это немного поможет.Это не полный ответ, который я хотел бы дать.По сути, HTML это беспорядок (на мой взгляд).У вас нет данных, разложенных по строкам (tr
), с ячейками таблицы (td
) внутри, чтобы вы могли легко изолировать отдельные текстовые элементы.
Я предлагаюСледующее действительно только для того, чтобы продемонстрировать странности попыток изолировать отдельные компоненты текста и читать / писать с сохранением арабских символов.Я позаимствовал метод потока adodb у @ who , чтобы обеспечить UTF-8.
Этот метод, зацикливающий теги table
и т. Д. С жестко закодированной нумерацией, является уродливым и действительно принадлежит к корзине с грехами.Я использую тот факт, что в более поздних таблицах ваши отдельные компоненты хранятся индивидуально, чтобы реконструировать общий вид таблицы со строками и столбцами.
Но вы можете получить что-то из этого:
Option Explicit
Public Sub test()
Dim fStream As ADODB.Stream, html As HTMLDocument
Set html = New HTMLDocument
Set fStream = New ADODB.Stream
With fStream
.Charset = "UTF-8"
.Open
.LoadFromFile "C:\Users\User\Downloads\LocalHTML.html"
html.body.innerHTML = .ReadText
.Close
End With
Dim hTables As Object, startTableNumber As Long, i As Long, r As Long, c As Long
Dim counter As Long, endTableNumber, numColumns As Long
startTableNumber = 43
endTableNumber = 330
numColumns = 9
Set hTables = html.getElementsByTagName("table")
r = 2: c = 1
For i = startTableNumber To endTableNumber Step 2
counter = counter + 1
If counter = 10 Then
c = 1: r = r + 1: counter = 1
End If
Cells(r, c) = hTables(i).innerText
c = c + 1
Next
End Sub