AXForum  
Вернуться   AXForum > Прочие обсуждения > Обсуждение форума
All
Забыли пароль?
Зарегистрироваться Правила Справка Пользователи Сообщения за день Поиск

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 11.07.2006, 16:07   #1  
Gustav is offline
Gustav
Moderator
Аватар для Gustav
SAP
Лучший по профессии 2009
 
1,858 / 1152 (42) ++++++++
Регистрация: 24.01.2006
Адрес: Санкт-Петербург
Записей в блоге: 19
Цитата:
Сообщение от Aleksey_M
Щас еще глянул - в ie у меня стоит галка в настройках "конвертировать url адреса в utf-8", а оно на это забивает
У меня, увы, аналогично.
Цитата:
Сообщение от Aleksey_M
На стороне сервера принудительное конвертирование делать не хочется
Дык, как выясняется, в этом нет никакой особой необходимости.
Цитата:
Сообщение от belugin
вставьте в строку браузера javascript:alert(encodeURIComponent('запрос два')) и нажмите Enter
Спасибо, классно. А если еще убрать alert и оставить только javascript:encodeURIComponent('запрос два') , то в тело будет выдана строка, которую можно скопировать.

По этим мотивам родил VBA-шную функцию, возвращающую юникодное представление исходной нормальной строки:
Код:
'Код - Excel VBA
 
Function myEncodeURIComponent(SourceString) As String
 
    'в Tools/References должна быть включена ссылка на "Microsoft Internet Controls" (shdocvw.dll)
 
    Static IE As InternetExplorer 'после первого вызова функции IE сохраняется в памяти для последующих вызовов
 
    If IE Is Nothing Then
        'для первого вызова, пока IE еще не определен
        Set IE = New InternetExplorer
        IE.Visible = True 'на время отладки
    End If
 
    If SourceString = "" Then
        'если передана пустая строка, то выгружаем нашу служебную копию IE
        IE.Quit
        Set IE = Nothing
        myEncodeURIComponent = ""
        Exit Function
    End If
 
    IE.Navigate "javascript:encodeURIComponent('" & SourceString & "')" 
    'Thanks to belugin
 
    myEncodeURIComponent = IE.Document.Body.InnerText
 
End Function
Получилось несколько заднепроходно, хотя в принципе вполне работоспособно (для тестового, непромышленного использования - хотя иное и не предполагается).

Однако, может быть, можно придумать что-нибудь более элегантное? (т.е. без подъёма доп. копии IE только для того, чтобы конвертить строки в юникод). В Excel VBA ничего похожего не нашёл, так же, как не нашёл библиотеку для References, "отвечающую" за javascript. Может быть, есть какое-нибудь гуманное конвертило в юникод, которое можно встроить в VBA-функцию?
Старый 11.07.2006, 16:23   #2  
belugin is offline
belugin
Участник
Аватар для belugin
Сотрудники Microsoft Dynamics
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии 2011
Лучший по профессии 2009
 
4,622 / 2925 (107) +++++++++
Регистрация: 16.01.2004
Записей в блоге: 5
Цитата:
Сообщение от Gustav
Может быть, есть какое-нибудь гуманное конвертило в юникод, которое можно встроить в VBA-функцию?
напишите scriptlet, или используйте MS Scripting Control
http://www.google.com/search?client=...utf-8&oe=utf-8
Старый 11.07.2006, 19:17   #3  
Gustav is offline
Gustav
Moderator
Аватар для Gustav
SAP
Лучший по профессии 2009
 
1,858 / 1152 (42) ++++++++
Регистрация: 24.01.2006
Адрес: Санкт-Петербург
Записей в блоге: 19
Цитата:
Сообщение от belugin
напишите scriptlet, или используйте MS Scripting Control
Спасибо. Воспользовался вторым. Прекрасно. Жажду познания удовлетворил. Получилось так:
Код:
'Код - Excel VBA
 
Function myNewEncodeURIComponent(ByVal SourceString As String) As String
 
    'в Tools/References должна быть включена ссылка
    'на "Microsoft Script Control 1.0" (msscript.ocx)
 
    Dim SC As MSScriptControl.ScriptControl
    Set SC = New MSScriptControl.ScriptControl
 
    SC.Language = "javascript"
    myNewEncodeURIComponent = SC.Eval("encodeURIComponent('" & SourceString & "')")
 
    Set SC = Nothing
End Function
 
? myNewEncodeURIComponent("два самолета")
%D0%B4%D0%B2%D0%B0%20%D1%81%D0%B0%D0%BC%D0%BE%D0%BB%D0%B5%D1%82%D0%B0
Сделал по аналогии с примером отсюда: Использование Script Control в VBA


P.S. В качестве "узелка на память" приложу еще ссылочку (напрямую не использовал, но может пригодиться):
Как с помощью VBA извлекать информацию из Web-страниц

Последний раз редактировалось Gustav; 11.07.2006 в 19:27.
Старый 11.07.2006, 23:34   #4  
Gustav is offline
Gustav
Moderator
Аватар для Gustav
SAP
Лучший по профессии 2009
 
1,858 / 1152 (42) ++++++++
Регистрация: 24.01.2006
Адрес: Санкт-Петербург
Записей в блоге: 19
Ну, и чтобы всё это не выглядело отвязанной семантической эквилибристикой, покажу, для чего это нужно было мне.
Итак, пошаговая иллюстрация:

1. Создадим новую рабочую книгу Excel.
2. В книге создадим новый модуль кода VBA и поместим туда ранее рассмотренную функцию myNewEncodeURIComponent.
3. Добавим в модуль еще одну функцию:
Код:
Function GetSearchURL(ByVal SearchCriteriaString As String) As String
 
    GetSearchURL = "http://axforum.info/forums/search.php?do=process&showposts=0&quicksearch=1&s=&query=" & _
                      myNewEncodeURIComponent(SearchCriteriaString)
End Function
4. Не забудем включить ссылку на Microsoft Script Control 1.0.
5. В ячейку A1 рабочего листа введем строку: быстрый excel
6. В ячейку B1 введем формулу: =ГИПЕРССЫЛКА( GetSearchURL(A1); "Поиск на AxForum по критерию: " & A1 )
(приведено для: Excel - русский, разделитель списка - точка с запятой).
7. Щелкнем по ячейке B1 - выполняется поиск, результаты предстают в новом окне Интернет-браузера.

Таким образом, появляется возможность сохранять свои критерии выполненных поисков в маленьком эксельном дневничке, расцвечивая его при желании всевозможной доп.информацией, например, датами, комментариями и т.п.

Последний раз редактировалось Gustav; 22.07.2006 в 00:25.
Старый 17.07.2006, 13:00   #5  
gl00mie is offline
gl00mie
Участник
MCBMSS
Most Valuable Professional
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
3,684 / 5788 (200) ++++++++++
Регистрация: 28.11.2005
Адрес: Москва
Записей в блоге: 3
Цитата:
Сообщение от Gustav
Итак, пошаговая иллюстрация:
1. Создадим новую рабочую книгу Excel.
2. В книге создадим новый модуль кода VBA и поместим туда ранее рассмотренную функцию myNewEncodeURIComponent.
...
5. В ячейку A1 рабочего листа введем строку: быстрый excel
6. В ячейку B1 введем формулу: =ГИПЕРССЫЛКА( GetSearchURL(A1); "Поиск на AxForum по критерию: " & A1 )
(приведено для: Excel - русский, разделитель списка - точка с запятой).
7. Щелкнем по ячейке B1 - выполняется поиск, результаты предстают в новом окне Интернет-браузера.
Напомнило статью в блоге Palle Agermark под названием Is there anything Excel isn't a good tool for?
Старый 17.07.2006, 13:37   #6  
Gustav is offline
Gustav
Moderator
Аватар для Gustav
SAP
Лучший по профессии 2009
 
1,858 / 1152 (42) ++++++++
Регистрация: 24.01.2006
Адрес: Санкт-Петербург
Записей в блоге: 19
Цитата:
Сообщение от gl00mie
Напомнило статью в блоге Palle Agermark под названием Is there anything Excel isn't a good tool for?
Хе-хе, не совсем понял, чем именно напомнило... если только названием как девизом - это да, всецело поддерживаю зарубежного товарища! А ссылочка любопытная, спасибо
Теги
как правильно, поиск, разделы, форум

 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
Опрос: какое время можно уделять форуму? otkudao Обсуждение форума 15 20.12.2005 13:23

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход

Рейтинг@Mail.ru
Часовой пояс GMT +3, время: 21:14.
Powered by vBulletin® v3.8.5. Перевод: zCarot
Контактная информация, Реклама.