Домашняя страница Undo Do New Save Карта сайта Обратная связь Поиск по форуму
МИР MS EXCEL - Гость.xls

Вход

Регистрация

Напомнить пароль

 

= Мир MS Excel/Вывод значений с сайта IE в excel с учетом формата данных - Мир MS Excel

Старая форма входа
  • Страница 1 из 1
  • 1
Модератор форума: китин, _Boroda_  
Вывод значений с сайта IE в excel с учетом формата данных
MapkycMex Дата: Воскресенье, 30.07.2023, 13:50 | Сообщение № 1
Группа: Пользователи
Ранг: Прохожий
Сообщений: 5
Репутация: 0 ±
Замечаний: 20% ±

Всем привет, являюсь новичком в мире VBA, тема для меня очень интересная, ее сейчас изучаю, по этой причине пишу с вопросом

У меня задача извлечь данные из открытой страницы IE, где данные представлены в виде таблицы с определенным количеством столбцов.
В интернете нашел код, который подходит мне, однако он выводит значение из браузера не учитывая столбцы, идет разбивка только на строки. В интернете уже неделю пытаюсь найти способ разделения данных на столбцы
Сам код представлен ниже, буду очень благодарен в помощи

[vba]
Код
Sub d()
Dim i2 As Long

a = GetIE.Document.body.innerText
arr = Split(a, vbLf)
Cells(1, 1).Resize(UBound(arr) + 1, 1) = Application.Transpose(arr)
End Sub

Function GetIE() As Object
Dim ShellApp As Object, ShellWindows As Object, i As Long
Dim IEObject As Object
Set ShellApp = CreateObject("Shell.Application")
Set ShellWindows = ShellApp.Windows()
For Each It In ShellWindows
Debug.Print It.FullName
If InStr(1, It.FullName, "IEXPLORE", vbTextCompare) <> 0 Then
Set IEObject = It
Exit For 'No need to continue....
End If
Next
Set GetIE = IEObject

End Function
[/vba]


Сообщение отредактировал Serge_007 - Понедельник, 31.07.2023, 08:31
 
Ответить
СообщениеВсем привет, являюсь новичком в мире VBA, тема для меня очень интересная, ее сейчас изучаю, по этой причине пишу с вопросом

У меня задача извлечь данные из открытой страницы IE, где данные представлены в виде таблицы с определенным количеством столбцов.
В интернете нашел код, который подходит мне, однако он выводит значение из браузера не учитывая столбцы, идет разбивка только на строки. В интернете уже неделю пытаюсь найти способ разделения данных на столбцы
Сам код представлен ниже, буду очень благодарен в помощи

[vba]
Код
Sub d()
Dim i2 As Long

a = GetIE.Document.body.innerText
arr = Split(a, vbLf)
Cells(1, 1).Resize(UBound(arr) + 1, 1) = Application.Transpose(arr)
End Sub

Function GetIE() As Object
Dim ShellApp As Object, ShellWindows As Object, i As Long
Dim IEObject As Object
Set ShellApp = CreateObject("Shell.Application")
Set ShellWindows = ShellApp.Windows()
For Each It In ShellWindows
Debug.Print It.FullName
If InStr(1, It.FullName, "IEXPLORE", vbTextCompare) <> 0 Then
Set IEObject = It
Exit For 'No need to continue....
End If
Next
Set GetIE = IEObject

End Function
[/vba]

Автор - MapkycMex
Дата добавления - 30.07.2023 в 13:50
MapkycMex Дата: Среда, 02.08.2023, 07:38 | Сообщение № 2
Группа: Пользователи
Ранг: Прохожий
Сообщений: 5
Репутация: 0 ±
Замечаний: 20% ±

Всем доброе утро
Подскажите, возможна реализация того что мне необходимо?
Моя благодарность за помощь может быть и материальной)))
 
Ответить
СообщениеВсем доброе утро
Подскажите, возможна реализация того что мне необходимо?
Моя благодарность за помощь может быть и материальной)))

Автор - MapkycMex
Дата добавления - 02.08.2023 в 07:38
MapkycMex Дата: Среда, 02.08.2023, 07:43 | Сообщение № 3
Группа: Пользователи
Ранг: Прохожий
Сообщений: 5
Репутация: 0 ±
Замечаний: 20% ±

Прикладываю сам файл
К сообщению приложен файл: test.xlsm (21.8 Kb)
 
Ответить
СообщениеПрикладываю сам файл

Автор - MapkycMex
Дата добавления - 02.08.2023 в 07:43
Gustav Дата: Среда, 02.08.2023, 14:30 | Сообщение № 4
Группа: Админы
Ранг: Участник клуба
Сообщений: 2797
Репутация: 1161 ±
Замечаний: ±

начинал с Excel 4.0, видел 2.1
По идее, получившиеся строки надо еще раз сплитануть (Split) по какому-то разделителю (обычно vbTab). Но он что-то не просматривается в ваших строках, возможно, съедается при конвертации (потому как засунуть табуляцию в ячейку Excel - это еще надо постараться). Возможно, этот разделитель надо еще перед первым Split'ом c помощью Replace превратить в какой-то более осязаемый "несъедаемый" символ, например, тильду (~) или подчеркивание (_).

Надо бы взглянуть на исходную таблицу в Интернете. Ссылку можете дать?


МОИ: Ник, Tip box: 41001663842605
 
Ответить
СообщениеПо идее, получившиеся строки надо еще раз сплитануть (Split) по какому-то разделителю (обычно vbTab). Но он что-то не просматривается в ваших строках, возможно, съедается при конвертации (потому как засунуть табуляцию в ячейку Excel - это еще надо постараться). Возможно, этот разделитель надо еще перед первым Split'ом c помощью Replace превратить в какой-то более осязаемый "несъедаемый" символ, например, тильду (~) или подчеркивание (_).

Надо бы взглянуть на исходную таблицу в Интернете. Ссылку можете дать?

Автор - Gustav
Дата добавления - 02.08.2023 в 14:30
MapkycMex Дата: Среда, 02.08.2023, 14:55 | Сообщение № 5
Группа: Пользователи
Ранг: Прохожий
Сообщений: 5
Репутация: 0 ±
Замечаний: 20% ±

Добрый день
Доступ к ссылке возможен только из внутренней сети компании
Сохранил из ГугХрома саму таблицу, во вложении
К сообщению приложен файл: onlinesales.mhtml (284.8 Kb)
 
Ответить
СообщениеДобрый день
Доступ к ссылке возможен только из внутренней сети компании
Сохранил из ГугХрома саму таблицу, во вложении

Автор - MapkycMex
Дата добавления - 02.08.2023 в 14:55
Gustav Дата: Четверг, 03.08.2023, 13:55 | Сообщение № 6
Группа: Админы
Ранг: Участник клуба
Сообщений: 2797
Репутация: 1161 ±
Замечаний: ±

начинал с Excel 4.0, видел 2.1
Скорее всего, Вам нужно у GetIE.Document.Body использовать свойство innerHTML, а не innerText. В этом случае можно опереться на имеющиеся тэги таблицы, строк и полей внутри строк.

Я не большой спец по разбору HTML, поэтому обратился к Всемирному Разуму и нашёл нечто подходящее на дружественном форуме. После небольшой правки процедура "Plangrafik" (это оригинальное название по ссылке) приобрела следующий вид, который Вы можете далее максимально адаптировать под свои нужды:
[vba]
Код
Sub Plangrafik()
    Dim Tr As Object
    Dim Td As Object
    Dim Tab1 As Object
    
    a = GetIE.Document.Body.innerHTML 'не .innerText

    Set HTML_Content = CreateObject("htmlfile")
    HTML_Content.Body.innerHTML = a
    
    Column_Num_To_Start = 1
    iRow = 2
    iCol = Column_Num_To_Start
    iTable = 0
    For Each Tab1 In HTML_Content.getElementsByTagName("table")
        With HTML_Content.getElementsByTagName("table")(iTable)
            For Each Tr In .Rows
                For Each Td In Tr.Cells
                    Sheets(1).Cells(iRow, iCol) = Td.innerText
                    iCol = iCol + 1
                Next Td
                iCol = Column_Num_To_Start
                iRow = iRow + 1
            Next Tr
        End With
        iTable = iTable + 1
        iCol = Column_Num_To_Start
        iRow = iRow + 1
    Next Tab1
End Sub
[/vba]


МОИ: Ник, Tip box: 41001663842605
 
Ответить
СообщениеСкорее всего, Вам нужно у GetIE.Document.Body использовать свойство innerHTML, а не innerText. В этом случае можно опереться на имеющиеся тэги таблицы, строк и полей внутри строк.

Я не большой спец по разбору HTML, поэтому обратился к Всемирному Разуму и нашёл нечто подходящее на дружественном форуме. После небольшой правки процедура "Plangrafik" (это оригинальное название по ссылке) приобрела следующий вид, который Вы можете далее максимально адаптировать под свои нужды:
[vba]
Код
Sub Plangrafik()
    Dim Tr As Object
    Dim Td As Object
    Dim Tab1 As Object
    
    a = GetIE.Document.Body.innerHTML 'не .innerText

    Set HTML_Content = CreateObject("htmlfile")
    HTML_Content.Body.innerHTML = a
    
    Column_Num_To_Start = 1
    iRow = 2
    iCol = Column_Num_To_Start
    iTable = 0
    For Each Tab1 In HTML_Content.getElementsByTagName("table")
        With HTML_Content.getElementsByTagName("table")(iTable)
            For Each Tr In .Rows
                For Each Td In Tr.Cells
                    Sheets(1).Cells(iRow, iCol) = Td.innerText
                    iCol = iCol + 1
                Next Td
                iCol = Column_Num_To_Start
                iRow = iRow + 1
            Next Tr
        End With
        iTable = iTable + 1
        iCol = Column_Num_To_Start
        iRow = iRow + 1
    Next Tab1
End Sub
[/vba]

Автор - Gustav
Дата добавления - 03.08.2023 в 13:55
MapkycMex Дата: Четверг, 03.08.2023, 15:02 | Сообщение № 7
Группа: Пользователи
Ранг: Прохожий
Сообщений: 5
Репутация: 0 ±
Замечаний: 20% ±

Спасибо большое
Код выводит данные в виде таблицы но почему-то пропало оглавление

Код съедает оглавление "Магазин ХХ", как-то возможно чтоб данное оглавление осталось?
У меня будет большой объём выгрузок, и все будут относится к разным магазинам, именно по оглавлению планировал искать совпадения с разными магазинами
 
Ответить
СообщениеСпасибо большое
Код выводит данные в виде таблицы но почему-то пропало оглавление

Код съедает оглавление "Магазин ХХ", как-то возможно чтоб данное оглавление осталось?
У меня будет большой объём выгрузок, и все будут относится к разным магазинам, именно по оглавлению планировал искать совпадения с разными магазинами

Автор - MapkycMex
Дата добавления - 03.08.2023 в 15:02
  • Страница 1 из 1
  • 1
Поиск:

Яндекс.Метрика Яндекс цитирования
© 2010-2024 · Дизайн: MichaelCH · Хостинг от uCoz · При использовании материалов сайта, ссылка на www.excelworld.ru обязательна!