Форум поддержки пользователей. LibreOffice, Apache OpenOffice, OpenOffice.org

Форум поддержки пользователей. LibreOffice, Apache OpenOffice, OpenOffice.org

8 Март 2021, 09:56 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
Новости: Часто задаваемые вопросы по LibreOffice и Apache OpenOffice.org
 
   Начало   Помощь Поиск Войти Регистрация    задать вопрос  
Страниц: 1   Вниз
  Печать  
Автор Тема: Можно ли в OpenOffice реализовать функцию сравнения цен по названию товара?  (Прочитано 9774 раз)
0 Пользователей и 1 Гость смотрят эту тему.
EvgenStor
Участник
**
Offline Offline

Сообщений: 13


« Стартовое сообщение: 26 Декабрь 2011, 01:10 »

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

[вложение удалено Администратором]
Записан
JohnSUN
Капитана в тот день называли на "ты"
Гуру
*******
Offline Offline

Пол: Мужской
Расположение: Киев
Сообщений: 2 764


Помогаю людям и компьютерам понимать друг друга


WWW
« Ответ #1: 26 Декабрь 2011, 12:57 »

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

Владислав Орлов aka JohnSUN
Благодарить-не зазорно.
Подарить благо создателям офиса, нашему ресурсу, мне
neft
Форумчанин
***
Offline Offline

Сообщений: 189


« Ответ #2: 26 Декабрь 2011, 14:03 »

Ну, нафига туда надо было пихать ProgressBar?
Лишнее украшательство только мешает.
Записан
JohnSUN
Капитана в тот день называли на "ты"
Гуру
*******
Offline Offline

Пол: Мужской
Расположение: Киев
Сообщений: 2 764


Помогаю людям и компьютерам понимать друг друга


WWW
« Ответ #3: 26 Декабрь 2011, 14:20 »

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

Владислав Орлов aka JohnSUN
Благодарить-не зазорно.
Подарить благо создателям офиса, нашему ресурсу, мне
EvgenStor
Участник
**
Offline Offline

Сообщений: 13


« Ответ #4: 26 Декабрь 2011, 16:34 »

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

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

Ну а все таки может Calc делать такое? Может кто код подправить под Calc?
Записан
neft
Форумчанин
***
Offline Offline

Сообщений: 189


« Ответ #5: 26 Декабрь 2011, 16:56 »

Там этот вот ProgressBar
С одной стороны, конечно, мешает - не дает правильно выполниться под LO.
Сперва его нужно или выбросить или переделать под LO.
А там видно будет.
Записан
EvgenStor
Участник
**
Offline Offline

Сообщений: 13


« Ответ #6: 26 Декабрь 2011, 17:41 »

Сперва его нужно или выбросить или переделать под LO.
А там видно будет.
Я все равно не понимаю этот язык программирования, поэтому мне сложно сказать что там надо убрать что не надо.
Для меня главное, что бы по введенному в ячейку названию товара осуществлялся поиск на Я.Маркте аналогичного товара, и выводил конечный результат в виде наименьших двух - трех цен для сравнения и ссылкой на магазин! А каким способом мне все равно.
Записан
neft
Форумчанин
***
Offline Offline

Сообщений: 189


« Ответ #7: 27 Декабрь 2011, 19:41 »

ProgressBar отключить легко.
Но классы VBA (то, что в Class Modules) не поддерживаются OOBasic.
Все их нужно переписывать, а это оооочень скучно и долго.
Записан
Рыбка Рио
Форумчанин
***
Offline Offline

Сообщений: 1 678


« Ответ #8: 28 Декабрь 2011, 22:57 »

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

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

ubuntu 12.04 + LibO3.6.0
Рыбка Рио
Форумчанин
***
Offline Offline

Сообщений: 1 678


« Ответ #9: 29 Декабрь 2011, 13:01 »

Вот подправленый макрос.

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 Offline

Сообщений: 13


« Ответ #10: 29 Декабрь 2011, 15:12 »

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

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

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

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



[вложение удалено Администратором]
Записан
Рыбка Рио
Форумчанин
***
Offline Offline

Сообщений: 1 678


« Ответ #11: 29 Декабрь 2011, 15:20 »

После запуска выдает ошибку "переменная типа Objekt не установлена" в строке Cell3.insertTextContent( Cell3.createTextCursor(), TF_URL(0), TRUE) (см. скрин в приложении)
Возьмите более свежий файл YandexMarket-c.ods (из моего предыдущегот сообщения).
Записан

ubuntu 12.04 + LibO3.6.0
Рыбка Рио
Форумчанин
***
Offline Offline

Сообщений: 1 678


« Ответ #12: 29 Декабрь 2011, 15:38 »

Вот ещё подправленный вариант (с задержкой между запросами 3 сек, и ещё несколько улучшений, например, теперь если товар не найден, ошибка не выскакивает)


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

ubuntu 12.04 + LibO3.6.0
EvgenStor
Участник
**
Offline Offline

Сообщений: 13


« Ответ #13: 30 Декабрь 2011, 17:00 »

Вот ещё подправленный вариант (с задержкой между запросами 3 сек, и ещё несколько улучшений, например, теперь если товар не найден, ошибка не выскакивает)

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

Powered by MySQL Powered by PHP Powered by SMF 1.1.21 | SMF © 2006-2009, Simple Machines Valid XHTML 1.0! Valid CSS!