Можно ли в OpenOffice реализовать функцию сравнения цен по названию товара?

Автор EvgenStor, 26 декабря 2011, 02:10

0 Пользователи и 1 гость просматривают эту тему.

EvgenStor

Можно ли в OpenOffice реализовать функцию сравнения цен по названию товара собственного прайса с ценами на Я.Маркт?
Есть несколько примеров реализации данной функции в Excel, может кто поможет переделать код под Calc? С меня пиво  :beer:!

[вложение удалено Администратором]

JohnSUN

Красивый код. Аккуратный. Приятно читать.
Взято здесь - http://excelvba.ru/tools/YandexMarket
(EvgenStor, в следующий раз указывай источник, пожалуйста)
Владислав Орлов aka JohnSUN
Благодарить-не зазорно.
Подарить благо создателям офиса, нашему ресурсу, мне

neft

Ну, нафига туда надо было пихать ProgressBar?
Лишнее украшательство только мешает.

JohnSUN

Э, батенька, вопрос спорный... С одной стороны, конечно, мешает - не дает правильно выполниться под LO. А с другой стороны, процесс общения с Яндекс-маркетом штука не быстрая, чтобы пользователь не паниковал на тему "Ой, всё повисло...", пусть полосочка ползет...
Владислав Орлов aka JohnSUN
Благодарить-не зазорно.
Подарить благо создателям офиса, нашему ресурсу, мне

EvgenStor

Цитата: JohnSUN от 26 декабря 2011, 12:57Красивый код. Аккуратный. Приятно читать.
Взято здесь - http://excelvba.ru/tools/YandexMarket
(EvgenStor, в следующий раз указывай источник, пожалуйста)

Я уже и не помнил то источник от куда был данный код взят, посмотрел по вашей ссылке и сразу вспомнил! В следующий раз буду источник добавлять.

Ну а все таки может Calc делать такое? Может кто код подправить под Calc?

neft

Там этот вот ProgressBar
Цитата: JohnSUN от 26 декабря 2011, 14:20С одной стороны, конечно, мешает - не дает правильно выполниться под LO.
Сперва его нужно или выбросить или переделать под LO.
А там видно будет.

EvgenStor

Цитата: neft от 26 декабря 2011, 16:56Сперва его нужно или выбросить или переделать под 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


[вложение удалено Администратором]
ubuntu 12.04 + LibO3.6.0

EvgenStor

Цитата: Клио от 28 декабря 2011, 23:57
Вот моя попытка сделать это. Нужно выделить ячейки с названиями товаров и нажать на кнопку. Файл недоделанный скорее всего, но доделать пока не могу, т.к. Яндекс теперь блокирует запросы с моего IP.

Клио спасибо за попытку!
Чтобы яндекс не блокировал IP нужно установить параметры
- сбор данных в один поток (будет выглядеть как будто один пользователь просматривает страницы)
- Пауза между сбором данных каждого наименования 3-5 сек. (лучше что бы этот параметр регулировался)

После запуска выдает ошибку "переменная типа Objekt не установлена" в строке Cell3.insertTextContent( Cell3.createTextCursor(), TF_URL(0), TRUE) (см. скрин в приложении)

Может кто то поможет доделать?



[вложение удалено Администратором]

Рыбка Рио

Цитата: EvgenStor от 29 декабря 2011, 15:12После запуска выдает ошибку "переменная типа 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

Цитата: Клио от 29 декабря 2011, 16:38
Вот ещё подправленный вариант (с задержкой между запросами 3 сек, и ещё несколько улучшений, например, теперь если товар не найден, ошибка не выскакивает)

Клио спасибо, плагин вроде работает. Только есть еще проблемка, я нахожусь в Германии, и Я.Маркт определяет мое место положение, соответственно для моего региона нет товаров, и макрос собирает одни нули в место цен, не подскажите можно ли с этим как то справиться?
И еще было бы не плохо если бы можно было регулировать задержку в ручную введя в соответствующею ячейку, или скажите где в коде можно исправлять это значение. Хочу подобрать опытным путем задержку, что бы избежать блокировку яндексом.