Картинка из ссылки

Автор TroYReall, 24 ноября 2011, 17:28

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

TroYReall

  Всем здрасти.
боюсь что без Вашей помощи никак не справлюсь, сегодня столкнулся с одной проблемой, получил в руки файл с двумя колонками в одном имя во втором ссылка на картинку в нашей любимой "паутине".
нужно сделать так чтобы либо вместо или рядом в другой колонке появились картинки из тех самых ссылок.
Т.е. мне чтобы прям в этой книге были и картинки и названия, строк очень много больше 400 отработать в ручную очень проблематично. Вариант сложить все картинки в папку тоже не подошел.
  Прошу помощи, поддержки в решении данной задачи.

JohnSUN

И тебе здрасти! В смысле, добро пожаловать!  ;D
А что за картинки-то? Эротика? Дал бы глянуть!
То есть, напрашивается конечно макрос, но так лень для его отладки тестовые данные готовить... Может, пристегнешь файл или его кусок к следующему сообщению?
Владислав Орлов aka JohnSUN
Благодарить-не зазорно.
Подарить благо создателям офиса, нашему ресурсу, мне

TroYReall

 :)
да конечно, я оставил строк 5 для примера, макрос я думаю это единственный вариант, пытался уже что-то найти в сети но не удачно.

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

JohnSUN

О! Так с этим уже можно и работать... Жаль, что не эротика Лови!

[вложение удалено Администратором]
Владислав Орлов aka JohnSUN
Благодарить-не зазорно.
Подарить благо создателям офиса, нашему ресурсу, мне

neft

Почему-то ошибка?


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

JohnSUN

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

neft

#6
OOo pro 3.3.0 (infra) - ошибка.

LibreOffice 3.4.4 - работает.

JohnSUN

А... Тогда понятно. Это свойство в LibreOffice есть. Кликаешь потом на картинку и она в браузере открывается.
Закомментировать эту строку, да и дело с концом... Или установить LO  ;)
Владислав Орлов aka JohnSUN
Благодарить-не зазорно.
Подарить благо создателям офиса, нашему ресурсу, мне

Рыбка Рио

#8
Вот такой макрос заменит все ссылки на png, jpg, gif на картинки.

REM*****BASIC*****

Sub Main
   oDoc = ThisComponent
   oSheet = oDoc.CurrentController.ActiveSheet
   
   SD = oSheet.createSearchDescriptor()
   SD.SearchRegularExpression = TRUE
   SD.SearchCaseSensitive = FALSE
   SD.SearchString = "jpg|gif|png"
   Results = oSheet.findAll(SD)
   Dim Props(0) as new com.sun.star.beans.PropertyValue
   Props(0).Name= "URL"
   Dim Size as new com.sun.star.awt.Size
   oProvider = createUnoService("com.sun.star.graphic.GraphicProvider")
      
   For i=0 to Results.Count-1
      NameOfCell = Results(i).AbsoluteName
      Cell = oSheet.getCellRangeByName(NameOfCell)
      If Cell.supportsService("com.sun.star.table.Cell") then 'тогда это ячейка, а иначе это диапазон ячеек
         oShape = oDoc.createInstance("com.sun.star.drawing.GraphicObjectShape")
         oSheet.DrawPage.add(oShape)
         Props(0).Value = Results(i).String
         'print Results(i).String
         oShape.Graphic = oProvider.queryGraphic(Props())
         'GlobalScope.BasicLibraries.loadLibrary("MRILib")
         w = oShape.Size.Width
         h = oShape.Size.Height
         wcl = Cell.Size.Width
         hcl = Cell.Size.Height

         Size.Width = wcl
         Size.Height = h*wcl/w
         If Size.Height > hcl then
            Size.Width = hcl*w/h
            Size.Height = hcl
         Endif
         oShape.setSize(Size)
         oShape.setPosition(Cell.Position)
         erase oShape
      Else
         'mri Cell
         r = Cell.Rows.Count-1
         c = Cell.Columns.Count-1
         For i=0 to r
         For j=0 to c
            oShape = oDoc.createInstance("com.sun.star.drawing.GraphicObjectShape")
            oSheet.DrawPage.add(oShape)
            Cellij = Cell.getCellByPosition(j,i)
            Props(0).Value = Cellij.String
            'print Cellij.String
            oShape.Graphic = oProvider.queryGraphic(Props())
            w = oShape.Size.Width
            h = oShape.Size.Height
            wcl = Cellij.Size.Width
            hcl = Cellij.Size.Height
   
            Size.Width = wcl
            Size.Height = h*wcl/w
            If Size.Height > hcl then
               Size.Width = hcl*w/h
               Size.Height = hcl
            Endif
            oShape.setSize(Size)
            oShape.setPosition(Cellij.Position)
            erase oShape
         Next
         Next
      Endif
   Next
End Sub


Тестовый файл:

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

Рыбка Рио

Цитата: Клио от 24 ноября 2011, 22:31Вот такой макрос заменит все ссылки на png, jpg, gif на картинки.
точнее не заменит, а добавит. А если нужно заменить, то там нужно добавить строчку после строчки Props(0).Value = Results(i).String:
Results(i).String = ""
и после строчки Props(0).Value = Cellij.String
строчку Cellij.String = ""
ubuntu 12.04 + LibO3.6.0

JohnSUN

Душевно! Провайдер действительно эффективнее - чик и всё. И масштабирование с сохранением пропорций - тоже изящно.
Только URL перед записью в Props лучше бы все-таки проверить на наличие... А то ведь findAll найдет и подпись к рисунку "Это мы в формате gif"  ;D
Владислав Орлов aka JohnSUN
Благодарить-не зазорно.
Подарить благо создателям офиса, нашему ресурсу, мне

Рыбка Рио

Ещё можно сохранить адрес файла и имя ячейки (к которой должна быть привязана картинка) в имени рисунка. Для этого нужно добавить строчки
oShape.Name = Props(0).Value +"##"+Cell.AbsoluteName ("##" - это разделитель, чтобы потом можно было использовать "Split(oShape.Name,"##")" )
после строк oShape.Graphic = oProvider.queryGraphic(Props())
Потом можно добавить макрос, который будет обновлять рисунки при изменении ширин и высот столбцов, т.к. информация о том, к какой ячейке привязан рисунок находится в имени самого рисунка.
ubuntu 12.04 + LibO3.6.0

Рыбка Рио

Цитата: JohnSUN от 24 ноября 2011, 23:04Только URL перед записью в Props лучше бы все-таки проверить на наличие...
Ага...
ubuntu 12.04 + LibO3.6.0

TroYReall

вот это да, честно говоря я впечатлён, друзья примите много-кратную БЛАГОДАРНОСТЬ.

JohnSUN

Ну дык! (с) Митьки
Ты попал в хорошую компанию. Ежели что - обращайся!
Владислав Орлов aka JohnSUN
Благодарить-не зазорно.
Подарить благо создателям офиса, нашему ресурсу, мне