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

Вход

Регистрация

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

 

= Мир MS Excel/Перекодировка данных полученных путем веб-запроса - Мир MS Excel

Старая форма входа
  • Страница 1 из 1
  • 1
Модератор форума: китин, _Boroda_  
Мир MS Excel » Вопросы и решения » Вопросы по VBA » Перекодировка данных полученных путем веб-запроса (Макросы Sub)
Перекодировка данных полученных путем веб-запроса
Lolopotamus Дата: Среда, 05.02.2014, 12:15 | Сообщение № 1
Группа: Пользователи
Ранг: Прохожий
Сообщений: 3
Репутация: 0 ±
Замечаний: 0% ±

Excel 2010
Добрый день, возникла необходимость парсинга огромного количества файлов.
При разработке макроса под это дело возникла проблема с перкодировкой полученных данных.
Имеем такой макрос:
[vba]
Код
Sub ParsingBuro()
'
' ParsingBuro Ìàêðîñ
'

'
With ActiveSheet.QueryTables.Add(Connection:= _
"URL;http://buro.ru/premium.aspx?pnum=37367", Destination:=Range("$A$1"))
.Name = "premium.aspx?pnum=37367"
.FieldNames = True
.RowNumbers = False
.FillAdjacentFormulas = False
.PreserveFormatting = True
.RefreshOnFileOpen = False
.BackgroundQuery = True
.RefreshStyle = xlInsertDeleteCells
.SavePassword = False
.SaveData = True
.AdjustColumnWidth = True
.RefreshPeriod = 0
.WebSelectionType = xlSpecifiedTables
.WebFormatting = xlWebFormattingNone
.WebTables = "295"
.WebPreFormattedTextToColumns = True
.WebConsecutiveDelimitersAsOne = True
.WebSingleBlockTextImport = False
.WebDisableDateRecognition = False
.WebDisableRedirections = False
.Refresh BackgroundQuery:=False
End With
End Sub
[/vba]

При выполнении подключения приходят файлы в кодировке, которая не читается. Как пример выдержка из полученных данных:
"РўРёРї: Шариковая ручка". Данные на самом сайте используют кодировку windows-1251. Мне необходимо перекинуть их в UTF-8.

Либо я плохо искал, либо не понимаю, как вставить несколько строчек в этот код.
 
Ответить
СообщениеДобрый день, возникла необходимость парсинга огромного количества файлов.
При разработке макроса под это дело возникла проблема с перкодировкой полученных данных.
Имеем такой макрос:
[vba]
Код
Sub ParsingBuro()
'
' ParsingBuro Ìàêðîñ
'

'
With ActiveSheet.QueryTables.Add(Connection:= _
"URL;http://buro.ru/premium.aspx?pnum=37367", Destination:=Range("$A$1"))
.Name = "premium.aspx?pnum=37367"
.FieldNames = True
.RowNumbers = False
.FillAdjacentFormulas = False
.PreserveFormatting = True
.RefreshOnFileOpen = False
.BackgroundQuery = True
.RefreshStyle = xlInsertDeleteCells
.SavePassword = False
.SaveData = True
.AdjustColumnWidth = True
.RefreshPeriod = 0
.WebSelectionType = xlSpecifiedTables
.WebFormatting = xlWebFormattingNone
.WebTables = "295"
.WebPreFormattedTextToColumns = True
.WebConsecutiveDelimitersAsOne = True
.WebSingleBlockTextImport = False
.WebDisableDateRecognition = False
.WebDisableRedirections = False
.Refresh BackgroundQuery:=False
End With
End Sub
[/vba]

При выполнении подключения приходят файлы в кодировке, которая не читается. Как пример выдержка из полученных данных:
"РўРёРї: Шариковая ручка". Данные на самом сайте используют кодировку windows-1251. Мне необходимо перекинуть их в UTF-8.

Либо я плохо искал, либо не понимаю, как вставить несколько строчек в этот код.

Автор - Lolopotamus
Дата добавления - 05.02.2014 в 12:15
SkyPro Дата: Среда, 05.02.2014, 12:21 | Сообщение № 2
Группа: Друзья
Ранг: Старожил
Сообщений: 1206
Репутация: 255 ±
Замечаний: 0% ±

2010
Использовать VBA для парсинга сайтов - извращение еще то..
Лучше взять бесплатный хостинг и спарсить php скриптом (используя cron для нон-стоп парсинга) в mysql (я использую библиотеку simple_html_dom.php, хотя regexp должны быть быстрее).
А потом просто выгрузить куда нужно контент.


skypro1111@gmail.com

Сообщение отредактировал SkyPro - Среда, 05.02.2014, 12:32
 
Ответить
СообщениеИспользовать VBA для парсинга сайтов - извращение еще то..
Лучше взять бесплатный хостинг и спарсить php скриптом (используя cron для нон-стоп парсинга) в mysql (я использую библиотеку simple_html_dom.php, хотя regexp должны быть быстрее).
А потом просто выгрузить куда нужно контент.

Автор - SkyPro
Дата добавления - 05.02.2014 в 12:21
Lolopotamus Дата: Среда, 05.02.2014, 12:32 | Сообщение № 3
Группа: Пользователи
Ранг: Прохожий
Сообщений: 3
Репутация: 0 ±
Замечаний: 0% ±

Excel 2010
Я понимаю, все возможные варианты парсинга через php. Но в данном случае мне интересна функция которая позволяет осуществлять перекодировку полученных данных. Если таковая есть.
 
Ответить
СообщениеЯ понимаю, все возможные варианты парсинга через php. Но в данном случае мне интересна функция которая позволяет осуществлять перекодировку полученных данных. Если таковая есть.

Автор - Lolopotamus
Дата добавления - 05.02.2014 в 12:32
SkyPro Дата: Среда, 05.02.2014, 12:37 | Сообщение № 4
Группа: Друзья
Ранг: Старожил
Сообщений: 1206
Репутация: 255 ±
Замечаний: 0% ±

2010
Я таковой не знаю.
Посмотрите здесь. Может что-либо подойдет.


skypro1111@gmail.com
 
Ответить
СообщениеЯ таковой не знаю.
Посмотрите здесь. Может что-либо подойдет.

Автор - SkyPro
Дата добавления - 05.02.2014 в 12:37
Hugo Дата: Среда, 05.02.2014, 12:48 | Сообщение № 5
Группа: Друзья
Ранг: Участник клуба
Сообщений: 3253
Репутация: 707 ±
Замечаний: 0% ±

2019
Как вариант - в конце встроить/исполнить это:
[vba]
Код
Sub tt()
      Dim objOleCvt, c As Range

      Set objOleCvt = CreateObject("OlePrn.OleCvt.1")

      With objOleCvt
          For Each c In ActiveSheet.UsedRange.Columns(1).Cells
              c.Value = .ToUnicode(c.Value, 65001)
          Next
      End With

      Set objOleCvt = Nothing

End Sub
[/vba]
Под XP x86 работает.


excel@nxt.ru
webmoney: E265281470651 Z422237915069
 
Ответить
СообщениеКак вариант - в конце встроить/исполнить это:
[vba]
Код
Sub tt()
      Dim objOleCvt, c As Range

      Set objOleCvt = CreateObject("OlePrn.OleCvt.1")

      With objOleCvt
          For Each c In ActiveSheet.UsedRange.Columns(1).Cells
              c.Value = .ToUnicode(c.Value, 65001)
          Next
      End With

      Set objOleCvt = Nothing

End Sub
[/vba]
Под XP x86 работает.

Автор - Hugo
Дата добавления - 05.02.2014 в 12:48
Lolopotamus Дата: Среда, 05.02.2014, 13:31 | Сообщение № 6
Группа: Пользователи
Ранг: Прохожий
Сообщений: 3
Репутация: 0 ±
Замечаний: 0% ±

Excel 2010
SkyPro, спасибо за интересную ссылку.
Hugo, спасибо большое за совет, попробую отпишусь.

Я абсолютный новичек в этих делах, надеюсь в последующем получится всё это освоить.
 
Ответить
СообщениеSkyPro, спасибо за интересную ссылку.
Hugo, спасибо большое за совет, попробую отпишусь.

Я абсолютный новичек в этих делах, надеюсь в последующем получится всё это освоить.

Автор - Lolopotamus
Дата добавления - 05.02.2014 в 13:31
Vostok Дата: Понедельник, 08.09.2014, 14:51 | Сообщение № 7
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 211
Репутация: 1 ±
Замечаний: 40% ±

Excel 2010
А есть ли вообще по парсингу на VBA какая-то литература? Может кто сталкивался? Может в составе каких то учебников?


"Посылая кого-то в Google, Помните, завтра туда могут Послать Вас !"
 
Ответить
СообщениеА есть ли вообще по парсингу на VBA какая-то литература? Может кто сталкивался? Может в составе каких то учебников?

Автор - Vostok
Дата добавления - 08.09.2014 в 14:51
SkyPro Дата: Понедельник, 08.09.2014, 14:57 | Сообщение № 8
Группа: Друзья
Ранг: Старожил
Сообщений: 1206
Репутация: 255 ±
Замечаний: 0% ±

2010
А есть ли вообще по парсингу на VBA какая-то литература?

А есть ли инструкции по вышиванию экскаватором?

Суть в том, что парсить при помощи ВБА, как я уже писал здесь, полное извращение.
А по вашему вопросу - гугл - 'CreateObject("MSXML2.XMLHTTP")' и CreateObject("vbscript.regexp")


skypro1111@gmail.com
 
Ответить
Сообщение
А есть ли вообще по парсингу на VBA какая-то литература?

А есть ли инструкции по вышиванию экскаватором?

Суть в том, что парсить при помощи ВБА, как я уже писал здесь, полное извращение.
А по вашему вопросу - гугл - 'CreateObject("MSXML2.XMLHTTP")' и CreateObject("vbscript.regexp")

Автор - SkyPro
Дата добавления - 08.09.2014 в 14:57
Vostok Дата: Вторник, 09.09.2014, 05:59 | Сообщение № 9
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 211
Репутация: 1 ±
Замечаний: 40% ±

Excel 2010
А есть ли инструкции по вышиванию экскаватором?

Суть в том, что парсить при помощи ВБА, как я уже писал здесь, полное извращение.
А по вашему вопросу - гугл - 'CreateObject("MSXML2.XMLHTTP")' и CreateObject("vbscript.regexp")

В гугле я был, не дурак. Поэтому и обратился за советом сюда. Ну а по поводу экскаватора так скажу. Иной раз в структуре какого-нибудь учебника есть интересующая тебя тема, а вот так, в чистом виде в Интернете её не найдёшь. Может кто и сталкивался. Мне же нужно подгружать данные в Excel с сайта (котировки финансовых инструментов), но параметрический запрос сделать не получается, Web разработчик отшлифовал ссылки для удобства поискового паука и там нет инфы ни на инструмент, ни на даты, ни таймфрейм. Что делать? Вот и возник вопрос парсинга и записи макроса.


"Посылая кого-то в Google, Помните, завтра туда могут Послать Вас !"

Сообщение отредактировал Vostok - Вторник, 09.09.2014, 06:06
 
Ответить
Сообщение
А есть ли инструкции по вышиванию экскаватором?

Суть в том, что парсить при помощи ВБА, как я уже писал здесь, полное извращение.
А по вашему вопросу - гугл - 'CreateObject("MSXML2.XMLHTTP")' и CreateObject("vbscript.regexp")

В гугле я был, не дурак. Поэтому и обратился за советом сюда. Ну а по поводу экскаватора так скажу. Иной раз в структуре какого-нибудь учебника есть интересующая тебя тема, а вот так, в чистом виде в Интернете её не найдёшь. Может кто и сталкивался. Мне же нужно подгружать данные в Excel с сайта (котировки финансовых инструментов), но параметрический запрос сделать не получается, Web разработчик отшлифовал ссылки для удобства поискового паука и там нет инфы ни на инструмент, ни на даты, ни таймфрейм. Что делать? Вот и возник вопрос парсинга и записи макроса.

Автор - Vostok
Дата добавления - 09.09.2014 в 05:59
SkyPro Дата: Вторник, 09.09.2014, 10:06 | Сообщение № 10
Группа: Друзья
Ранг: Старожил
Сообщений: 1206
Репутация: 255 ±
Замечаний: 0% ±

2010
Я уже ответил в какую сторону копать. Если не получается найти инфу - покажите ссылку на сайт и что нужно получить. Возможно, дам более развернутый ответ. Только новую тему создавайте.


skypro1111@gmail.com

Сообщение отредактировал SkyPro - Вторник, 09.09.2014, 10:06
 
Ответить
СообщениеЯ уже ответил в какую сторону копать. Если не получается найти инфу - покажите ссылку на сайт и что нужно получить. Возможно, дам более развернутый ответ. Только новую тему создавайте.

Автор - SkyPro
Дата добавления - 09.09.2014 в 10:06
Vostok Дата: Вторник, 09.09.2014, 10:26 | Сообщение № 11
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 211
Репутация: 1 ±
Замечаний: 40% ±

Excel 2010
Я уже ответил в какую сторону копать. Если не получается найти инфу - покажите ссылку на сайт и что нужно получить. Возможно, дам более развернутый ответ. Только новую тему создавайте.


Тему создал. http://www.excelworld.ru/forum/10-12885-1


"Посылая кого-то в Google, Помните, завтра туда могут Послать Вас !"
 
Ответить
Сообщение
Я уже ответил в какую сторону копать. Если не получается найти инфу - покажите ссылку на сайт и что нужно получить. Возможно, дам более развернутый ответ. Только новую тему создавайте.


Тему создал. http://www.excelworld.ru/forum/10-12885-1

Автор - Vostok
Дата добавления - 09.09.2014 в 10:26
alex77755 Дата: Вторник, 09.09.2014, 11:52 | Сообщение № 12
Группа: Проверенные
Ранг: Обитатель
Сообщений: 362
Репутация: 64 ±
Замечаний: 0% ±

Не это?
Цитата
"Тип: Шариковая ручка".

=Тип: Шариковая ручка

[vba]
Код
Option Explicit

Private Declare Function MultiByteToWideChar Lib "kernel32.dll" (ByVal CodePage As Long, ByVal dwFlags As Long, ByVal lpMultiByteStr As String, ByVal cchMultiByte As Long, ByVal lpWideCharStr As Long, ByVal cchWideChar As Long) As Long
Private Declare Function WideCharToMultiByte Lib "kernel32.dll" (ByVal CodePage As Long, ByVal dwFlags As Long, ByVal lpWideCharStr As Long, ByVal cchWideChar As Long, ByVal lpMultiByteStr As Long, ByVal cchMultiByte As Long, ByVal lpDefaultChar As Long, ByVal lpUsedDefaultChar As Long) As Long

Public Function UTF8ToWin(ByVal inString As String) As String
         Dim hMemLock1   As Long, hMemLock2  As Long
         Dim iStrSize    As Long, lMaxSize As Long, str1 As String, str2 As String
         inString = inString & vbNullChar '& vbNullChar
         lMaxSize = Len(inString)
         str1 = String$(lMaxSize, 0&)
         str2 = String$(lMaxSize, 0&)
         hMemLock1 = StrPtr(str1)
         hMemLock2 = StrPtr(str2)
         iStrSize = MultiByteToWideChar(65001, 0&, inString, &HFFFF, hMemLock1, lMaxSize)
         iStrSize = WideCharToMultiByte(0&, 0&, hMemLock1, &HFFFF, hMemLock2, iStrSize, 0&, 0&)

         If Len(iStrSize) Then
         UTF8ToWin = StrConv(str2, vbUnicode)
         End If
End Function

Sub QWERT()
  Debug.Print UTF8ToWin("РўРёРї: Шариковая ручка")
End Sub
[/vba]


Могу помочь в VB6, VBA
Alex77755@mail.ru
 
Ответить
СообщениеНе это?
Цитата
"Тип: Шариковая ручка".

=Тип: Шариковая ручка

[vba]
Код
Option Explicit

Private Declare Function MultiByteToWideChar Lib "kernel32.dll" (ByVal CodePage As Long, ByVal dwFlags As Long, ByVal lpMultiByteStr As String, ByVal cchMultiByte As Long, ByVal lpWideCharStr As Long, ByVal cchWideChar As Long) As Long
Private Declare Function WideCharToMultiByte Lib "kernel32.dll" (ByVal CodePage As Long, ByVal dwFlags As Long, ByVal lpWideCharStr As Long, ByVal cchWideChar As Long, ByVal lpMultiByteStr As Long, ByVal cchMultiByte As Long, ByVal lpDefaultChar As Long, ByVal lpUsedDefaultChar As Long) As Long

Public Function UTF8ToWin(ByVal inString As String) As String
         Dim hMemLock1   As Long, hMemLock2  As Long
         Dim iStrSize    As Long, lMaxSize As Long, str1 As String, str2 As String
         inString = inString & vbNullChar '& vbNullChar
         lMaxSize = Len(inString)
         str1 = String$(lMaxSize, 0&)
         str2 = String$(lMaxSize, 0&)
         hMemLock1 = StrPtr(str1)
         hMemLock2 = StrPtr(str2)
         iStrSize = MultiByteToWideChar(65001, 0&, inString, &HFFFF, hMemLock1, lMaxSize)
         iStrSize = WideCharToMultiByte(0&, 0&, hMemLock1, &HFFFF, hMemLock2, iStrSize, 0&, 0&)

         If Len(iStrSize) Then
         UTF8ToWin = StrConv(str2, vbUnicode)
         End If
End Function

Sub QWERT()
  Debug.Print UTF8ToWin("РўРёРї: Шариковая ручка")
End Sub
[/vba]

Автор - alex77755
Дата добавления - 09.09.2014 в 11:52
Vostok Дата: Вторник, 09.09.2014, 12:28 | Сообщение № 13
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 211
Репутация: 1 ±
Замечаний: 40% ±

Excel 2010
В последнем сообщении часть сообщения не читаема. Что-то с кодировкой. Не могу разобрать что в конце кода написано.

Sub QWERT()
Debug.Print UTF8ToWin("Тип: Шариковая ручка")
End Sub


"Посылая кого-то в Google, Помните, завтра туда могут Послать Вас !"

Сообщение отредактировал Vostok - Вторник, 09.09.2014, 12:30
 
Ответить
СообщениеВ последнем сообщении часть сообщения не читаема. Что-то с кодировкой. Не могу разобрать что в конце кода написано.

Sub QWERT()
Debug.Print UTF8ToWin("Тип: Шариковая ручка")
End Sub

Автор - Vostok
Дата добавления - 09.09.2014 в 12:28
Мир MS Excel » Вопросы и решения » Вопросы по VBA » Перекодировка данных полученных путем веб-запроса (Макросы Sub)
  • Страница 1 из 1
  • 1
Поиск:

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