powered by simpleCommunicator - 2.0.54     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Импорт из HTML
25 сообщений из 30, страница 1 из 2
Импорт из HTML
    #39336615
Fora74
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Здравствуйте, уважаемые!
Не был на форуме около 10 лет, скучал, ...но не было прикладной задачи (а без нее не интересно), но сейчас она появилась:
Мне необходимо импортировать HTM файл с фиксированной структурой (см аттач)
Перекопал весь Google, но не смог вытянуть вторую таблицу....
Помогите, пожалуйста, с алгоритмом... И если можно, немного кода...
...
Рейтинг: 0 / 0
Импорт из HTML
    #39336622
Fora74
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Упс, не тот файл приложил...
И, да, нужна третья таблица..
...
Рейтинг: 0 / 0
Импорт из HTML
    #39336679
guest_rusimport
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Fora74,
...
Рейтинг: 0 / 0
Импорт из HTML
    #39336758
Fora74
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
guest_rusimportFora74,
Спасибо, результат тот, который нужен.
Вопрос в том, как его достичь?
...
Рейтинг: 0 / 0
Импорт из HTML
    #39336759
guest_rusimport
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Fora74,

с помощью незначительной адаптации примера
http://am.rusimport.ru/msaccess/topic.aspx?ID=378
и использования библиотеки ADOX
...
Рейтинг: 0 / 0
Импорт из HTML
    #39336762
Fora74
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
guest_rusimport,
Ваш пример я видел.
На строке, после открытия IE
Код: vbnet
1.
If IE.readyState = READYSTATE_COMPLETE Then


вылетает ошибка "...Вызванный объект был отключен от клиентов"
...
Рейтинг: 0 / 0
Импорт из HTML
    #39336767
guest_rusimport
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Fora74,
пример не мой (у меня работает без ошибок)... а какая таблица то нужна ? первая или вторая?
...
Рейтинг: 0 / 0
Импорт из HTML
    #39336773
Guest11111
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
guest_rusimport,

Если в качестве адреса открываемой страницы HTTP, то работает нормально. В моем случае файл сохранен локально, вылезает ошибка.
Нужна большая таблица (х.з. какая по счету).
У Вас же она нормально импортировалась!
...
Рейтинг: 0 / 0
Импорт из HTML
    #39336775
guest_rusimport
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Guest11111,
в качестве адреса указал локальный адрес (файл положил в папку с базой,проблем нет)
Код: vbnet
1.
.navigate CurrentProject.Path & "\StrategyTester.htm"


в принципе можно сначала таблицу импортировать в Excel через внешние данные, а потом уже из excel в access (тоже проблем нет, минутное дело)
...
Рейтинг: 0 / 0
Импорт из HTML
    #39336781
Fora74
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
guest_rusimport,

Бред какой-то: в Ваш пример вставляю Вашу строку, и никакого эффекта...
Спасибо, за помощь, буду дальше ковырять..
...
Рейтинг: 0 / 0
Импорт из HTML
    #39336786
guest_rusimport
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Fora74,
держи функцию для отладки, помести в общий модуль и запускай в окне Immediate
Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
Public Function imphtm2()
Dim j As Integer
Dim k As Integer
Dim body(10) As String

Dim oDoc As New MSHTML.HTMLDocument
Dim ct As MSHTML.IHTMLElementCollection
Dim t As MSHTML.IHTMLTable
Dim r As MSHTML.IHTMLTableRow

Dim IE As Object
Set IE = CreateObject("InternetExplorer.Application")
   With IE
   .navigate CurrentProject.Path & "\StrategyTester.htm"
       Do
        If IE.readyState = READYSTATE_COMPLETE Then
        Exit Do
       End If
     Loop
   Set oDoc = .Document
       Do
        DoEvents
       Loop Until oDoc.readyState = "complete"
       
 Set ct = oDoc.getElementsByTagName("TABLE")
   Set t = ct.Item(1)
   Debug.Print "Таблица" & i + 1
     For j = 0 To t.rows.length - 1
        Set r = t.rows(j)
        Debug.Print "---------------------------------------------------------"
        For k = 0 To r.cells.length - 1
            body(k) = r.cells(k).innerText
        Next k
        Debug.Print body(0), body(1), body(2), body(3), body(4), body(5), body(6), body(7), body(8), body(9)
        For z = 0 To 9
            body(z) = ""
        Next z
     Next j
End With

Set IE = Nothing
Set oDoc = Nothing
End Function
...
Рейтинг: 0 / 0
Импорт из HTML
    #39336795
Fora74
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
guest_rusimport,

Спасибо.
В Вашей функции не объявлены i и z.
Но это не важно.
Встает на строке
Код: vbnet
1.
If IE.readyState = READYSTATE_COMPLETE Then


Ошибка: run-time error '-2147417848, т.е. после открытия страницы ссылка на объект IE отваливается.
Курю Google, есть подозрение, что дело в IE11 и Windows7 64bit.
Уже пробовал делать задержку, не помогает.
...
Рейтинг: 0 / 0
Импорт из HTML
    #39336800
Fora74
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
guest_rusimportGuest11111,

в принципе можно сначала таблицу импортировать в Excel через внешние данные, а потом уже из excel в access (тоже проблем нет, минутное дело)
Сориентируйте, пожалуйста в этом направлении....
Я боюсь, если сейчас IE победю :) , у других ошибка вылезет.

А еще я пробовал ч-з открытие файла, только не знаю, как html потом парсить..
...
Рейтинг: 0 / 0
Импорт из HTML
    #39336802
guest_rusimport
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Fora74,
у меня Win7 64, IE11 - проблем нет
...
Рейтинг: 0 / 0
Импорт из HTML
    #39336808
guest_rusimport
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Fora74guest_rusimportGuest11111,

в принципе можно сначала таблицу импортировать в Excel через внешние данные, а потом уже из excel в access (тоже проблем нет, минутное дело)
Сориентируйте, пожалуйста в этом направлении....
Я боюсь, если сейчас IE победю :) , у других ошибка вылезет.

А еще я пробовал ч-з открытие файла, только не знаю, как html потом парсить..
импортируете таблицу в Excel, сохраняете файл, потом импортируете этот файл в Access
...
Рейтинг: 0 / 0
Импорт из HTML
    #39336809
guest_rusimport
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Fora74,
...
Рейтинг: 0 / 0
Импорт из HTML
    #39336813
Fora74
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Получилось, но нужно более технологично- "нажми на кнопку- получишь результат"
Если бы стоял вопрос вытащить 1-2 таблицы и только для себя, я бы вообще ч-з буфер обмена все сделал.
И еще минус- количество может достигать нескольких тысяч. Excel помрет.
Все равно спасибо. Ни разу так в Excel не приходилось импортировать.
Прикольно.. :)
...
Рейтинг: 0 / 0
Импорт из HTML
    #39336814
Fora74
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Fora74,

А если создать объект Excel, а потом в-него-из-него погонять?
...
Рейтинг: 0 / 0
Импорт из HTML
    #39337117
guest_rusimport
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Fora74А еще я пробовал ч-з открытие файла, только не знаю, как html потом парсить..
можно и так, вот вам функция для опытов с вашим файлом, в Immediate запускаете и наблюдаете, как работает (ну, до ума, я думаю, сами доведете)
Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
Public Function pars()
Dim fff1(10) As String
Open CurrentProject.Path & "\StrategyTester.htm" For Input As #1
Do While Not EOF(1)
    Line Input #1, st1
    st = st & st1
Loop
Close #1
k = 1
li = InStr(1, st, "</tr>")
i = InStr(1, st, "</td>")
Do While i <> 0
    i = InStr(k, st, "</td>")
    If i > li Or i = 0 Then
        If start = 1 Then Debug.Print fff1(1), fff1(2), fff1(3), fff1(4), fff1(5), fff1(6), fff1(7), fff1(8), fff1(9), fff1(10)
        For mi = 1 To 10
            fff1(mi) = ""
        Next mi
        m = 1
        li = InStr(li + 1, st, "</tr>")
    End If
    If i = 0 Then Exit Do
    j = InStrRev(st, ">", i)
    fff = Mid(st, j + 1, i - j - 1)
    If fff = "№" Then start = 1: m = 1
    If start = 1 Then fff1(m) = fff: m = m + 1
    k = i + 1
Loop
End Function
...
Рейтинг: 0 / 0
Импорт из HTML
    #39337338
Fora74
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
guest_rusimport,

Супер! все работает! Куда "+" ставить? :)
...
Рейтинг: 0 / 0
Импорт из HTML
    #39337351
guest_rusimport
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Fora74guest_rusimport,

Супер! все работает! Куда "+" ставить? :)
Ну, и хорошо! Пожелай лучше "$" :)
...
Рейтинг: 0 / 0
Импорт из HTML
    #39338306
Fora74
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
И снова здравствуйте.
Не легла душа к предыдущему решению.
Вот что еще придумал:
Считываю исходный html в строковую переменную, затем ищу тэги нужной таблицы и сохраняю найденный кусок обратно в html.
Затем SELECTом получаю то, что нужно.
Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
Public Function File2StrB(sPath As String) As String ' Функция взята с am.rusimport. Очередное огромное спасибо!
Dim txt As String
Dim sLine As String
Dim fn As Long
fn = FreeFile
Dim TheBytes()  As Byte
ReDim TheBytes(FileLen(sPath) - 1)
    Open sPath For Binary Access Read As fn
        Get #fn, , TheBytes()
    Close fn
File2StrB = StrConv(TheBytes(), 64)
End Function

Public Function testWrite(noTable As Long)
Dim str As String
Dim p, e, k As Long
Dim sql As String
Dim strPath As String
strPath = CurrentProject.Path
str = File2StrB(strPath & "\StrategyTester.htm")

p = 0
For k = 1 To noTable
    p = p + 1
    p = InStr(p, str, "<table")
    e = InStr(p, str, "</table>")
Next k

str = Mid(str, p, e - p + 8)

Open "tmpFile.html" For Output As #1
Write #1, str
Close #1    

sql = "SELECT * from [table] in ''[HTML Import;DATABASE=" & strPath & "\tmpFile.html;HDR=yes]"
CurrentDb.QueryDefs("q1").sql = sql
DoCmd.OpenQuery "q1"

End Function


Собственно все работает в моей узкой задаче- импорт таблицы с цифровыми данными.
Но есть два момента, с которыми я так и не разобрался:
1. Окончательная строка для записи в файл обрамлена кавычками(") (см. вложение). Всякими LEFT- RIGHT убираются вместе с полезной строкой.
Впрочем, на результат это никак не влияет.. Просто интересно.

2 проблема- если таблица содержит русский текст, то кодировка слетает.
Пробовал tmpFile.html прилинковать мастером, хотел посмотреть спецификацию подключения- вылетают ошибки, но есть подозрение, что кодировка Западноевропейская (1252). Как победить кодировку? Chrome открывает без проблем.

Спасибо.
...
Рейтинг: 0 / 0
Импорт из HTML
    #39338394
guest_rusimport
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Fora74,
кабы с кодировкой всё так просто было воспользовались бы стандартными средствами импорта из html документов сразу... может Анатолий (Киев) что подскажет по этому "темному" делу - импорту html документов в access (ну, и в частности, по вашему случаю)
...
Рейтинг: 0 / 0
Импорт из HTML
    #39338411
Фотография Панург
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Fora74... проблема- если таблица содержит русский текст, то кодировка слетает...
Fora74, ИМХО, (не читал, но не одобряю) проблема в функции imphtm2 , а точнее в этой строке - StrConv(TheBytes(), 64) .
...
Рейтинг: 0 / 0
Импорт из HTML
    #39338433
Fora74_guest
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Панург,
Я в "сдул" эту функцию. Думал в ней загвоздка, но методом "научного тыка" ничего лучшего не получилось, вернее не получился искомый результат.

to guest_rusimport:
в общем то Вы правы, вся возня началась из-за кривизны штатного импорта.
Кстати, я так и не понял, почему в функции File2StrB такой заковыристый способ чтения файла целиком. Сколько на эту тему ни рыл, везде примеры с построчным чтением, но без преобразований из Byte.
...
Рейтинг: 0 / 0
25 сообщений из 30, страница 1 из 2
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Импорт из HTML
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]