EvgenStor
Участник

Offline
Сообщений: 13
|
Можно ли в OpenOffice реализовать функцию сравнения цен по названию товара собственного прайса с ценами на Я.Маркт? Есть несколько примеров реализации данной функции в Excel, может кто поможет переделать код под Calc? С меня пиво  ! [вложение удалено Администратором]
|
|
|
Записан
|
|
|
|
|
neft
|
Ну, нафига туда надо было пихать ProgressBar? Лишнее украшательство только мешает.
|
|
|
Записан
|
|
|
|
JohnSUN
|
Э, батенька, вопрос спорный... С одной стороны, конечно, мешает - не дает правильно выполниться под LO. А с другой стороны, процесс общения с Яндекс-маркетом штука не быстрая, чтобы пользователь не паниковал на тему "Ой, всё повисло...", пусть полосочка ползет...
|
|
|
Записан
|
|
|
|
EvgenStor
Участник

Offline
Сообщений: 13
|
Я уже и не помнил то источник от куда был данный код взят, посмотрел по вашей ссылке и сразу вспомнил! В следующий раз буду источник добавлять. Ну а все таки может Calc делать такое? Может кто код подправить под Calc?
|
|
|
Записан
|
|
|
|
neft
|
Там этот вот ProgressBar С одной стороны, конечно, мешает - не дает правильно выполниться под LO. Сперва его нужно или выбросить или переделать под LO. А там видно будет.
|
|
|
Записан
|
|
|
|
EvgenStor
Участник

Offline
Сообщений: 13
|
Сперва его нужно или выбросить или переделать под LO. А там видно будет. Я все равно не понимаю этот язык программирования, поэтому мне сложно сказать что там надо убрать что не надо. Для меня главное, что бы по введенному в ячейку названию товара осуществлялся поиск на Я.Маркте аналогичного товара, и выводил конечный результат в виде наименьших двух - трех цен для сравнения и ссылкой на магазин! А каким способом мне все равно.
|
|
|
Записан
|
|
|
|
neft
|
ProgressBar отключить легко. Но классы VBA (то, что в Class Modules) не поддерживаются OOBasic. Все их нужно переписывать, а это оооочень скучно и долго.
|
|
|
Записан
|
|
|
|
Рыбка Рио
|
Вот моя попытка сделать это. Нужно выделить ячейки с названиями товаров и нажать на кнопку. Файл недоделанный скорее всего, но доделать пока не могу, т.к. Яндекс теперь блокирует запросы с моего IP.
[вложение удалено Администратором]
|
|
|
Записан
|
ubuntu 12.04 + LibO3.6.0
|
|
|
Рыбка Рио
|
Вот подправленый макрос. Dim Doc As Object Dim Sheet As Object Dim Cell As Object
Sub Main Doc = ThisComponent Sheet = Doc.CurrentController.ActiveSheet Selection = Doc.CurrentSelection SI = Doc.CurrentController.StatusIndicator m=0 Dim SL(0) If Selection.supportsService("com.sun.star.sheet.SheetCellRanges") then 'множественное выделение m=Selection.Count-1 Redim SL(m) For i=0 to m SL(i)=Selection(i) Next Else SL(0)=Selection Endif For i3=0 to m k = SL(i3).Rows.Count-1 l = SL(i3).Columns.Count-1 c=0 SI.reset SI.start(cStr(i3)+"/"+cStr(m),(k+1)*(l+1)) For i1=0 to k For i2=0 to l Cell = SL(i3).getCellByPosition(i2,i1) s =Cell.String If s<>"" then ExecuteQuery(s) Endif c=c+1 SI.setValue(c) Next Next Next SI.end End Sub
Sub ExecuteQuery(product As String) If Doc.Sheets.hasByName("Временный") then Doc.Sheets.removeByName("Временный") Doc.Sheets.insertNewByName("Временный",0) SheetTMP = Doc.Sheets(0) pr = ConvertToURL(product) product = Right(pr,len(pr)-8) URL = "http://m.market.yandex.ru/search.xml?text=" & product & _ "&srnum=31&hid=90401&np=1&how=aprice&deliveryincluded=0" AL = Doc.AreaLinks For i4=0 to AL.Count-1 AL.removeByIndex(i4) Next 'GlobalScope.BasicLibraries.loadLibrary("MRILib") CellAddress = SheetTMP.getCellRangeByName("A1").CellAddress AL.insertAtPosition(CellAddress,URL, "HTML_3", "calc_HTML_WebQuery", "0 0" ) j=0 Dim Price(4) As Long Dim TF(4) Dim Prodavec(4) As String Dim TF_URL(4)
PriceAverage = 0 Cellj = SheetTMP.getCellByPosition(0,j) While Cellj.String <> "" and j<5 If Cellj.TextFields.Count = 0 then msgbox Cellj.String : Exit Sub TF(j) = Cellj.TextFields(0) TF_URL(j) = Doc.createInstance("com.sun.star.text.TextField.URL") 'mri TF_URL(j) TF_URL(j).URL = TF(j).URL TF_URL(j).Representation = TF(j).Representation m = len(Cellj.String)-len(TF_URL(j).Representation) s = Right(Cellj.String, m) Ar() = Split(s,"руб.") s1 = Trim(Ar(0)) Prodavec(j) = Trim(Ar(1)) s1 = Join(Split(s1," "),"") Cellj.String = s1 Price(j)=cLng(s1) PriceAverage = PriceAverage + Price(j) j=j+1 Cellj = SheetTMP.getCellByPosition(0,j) Wend PriceAverage = PriceAverage/5 r = Cell.CellAddress.Row c = Cell.CellAddress.Column Sheet.getCellByPosition(c+1,r).Value = PriceAverage Sheet.getCellByPosition(c+2,r).Value = Price(0) Cell4 = Sheet.getCellByPosition(c+4,r) Cell4.insertTextContent( Cell4.createTextCursor(), TF_URL(0), TRUE) 'Last parameter (bAbsorb) specifies whether the text spanned by xRange will be replaced. If true then the content of xRange will be replaced by xContent, otherwise xContent will be inserted at the end of xRange. Sheet.getCellByPosition(c+3,r).String = Prodavec(0) Doc.Sheets.removeByName("Временный") End Sub[вложение удалено Администратором]
|
|
« Последнее редактирование: 29 Декабрь 2011, 13:17 от Клио »
|
Записан
|
ubuntu 12.04 + LibO3.6.0
|
|
|
EvgenStor
Участник

Offline
Сообщений: 13
|
Вот моя попытка сделать это. Нужно выделить ячейки с названиями товаров и нажать на кнопку. Файл недоделанный скорее всего, но доделать пока не могу, т.к. Яндекс теперь блокирует запросы с моего IP.
Клио спасибо за попытку! Чтобы яндекс не блокировал IP нужно установить параметры - сбор данных в один поток (будет выглядеть как будто один пользователь просматривает страницы) - Пауза между сбором данных каждого наименования 3-5 сек. (лучше что бы этот параметр регулировался) После запуска выдает ошибку "переменная типа Objekt не установлена" в строке Cell3.insertTextContent( Cell3.createTextCursor(), TF_URL(0), TRUE) (см. скрин в приложении) Может кто то поможет доделать? [вложение удалено Администратором]
|
|
|
Записан
|
|
|
|
Рыбка Рио
|
После запуска выдает ошибку "переменная типа Objekt не установлена" в строке Cell3.insertTextContent( Cell3.createTextCursor(), TF_URL(0), TRUE) (см. скрин в приложении) Возьмите более свежий файл YandexMarket-c.ods (из моего предыдущегот сообщения).
|
|
|
Записан
|
ubuntu 12.04 + LibO3.6.0
|
|
|
Рыбка Рио
|
Вот ещё подправленный вариант (с задержкой между запросами 3 сек, и ещё несколько улучшений, например, теперь если товар не найден, ошибка не выскакивает)
[вложение удалено Администратором]
|
|
|
Записан
|
ubuntu 12.04 + LibO3.6.0
|
|
|
EvgenStor
Участник

Offline
Сообщений: 13
|
Вот ещё подправленный вариант (с задержкой между запросами 3 сек, и ещё несколько улучшений, например, теперь если товар не найден, ошибка не выскакивает) Клио спасибо, плагин вроде работает. Только есть еще проблемка, я нахожусь в Германии, и Я.Маркт определяет мое место положение, соответственно для моего региона нет товаров, и макрос собирает одни нули в место цен, не подскажите можно ли с этим как то справиться? И еще было бы не плохо если бы можно было регулировать задержку в ручную введя в соответствующею ячейку, или скажите где в коде можно исправлять это значение. Хочу подобрать опытным путем задержку, что бы избежать блокировку яндексом.
|
|
|
Записан
|
|
|
|
|