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

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

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

Войти
Новости: Вы можете задать вопрос по LibreOffice или Apache OpenOffice без регистрации, используя форму
 
   Начало   Помощь Поиск Войти Регистрация    задать вопрос  
Страниц: « 1 2   Вниз
  Печать  
Автор Тема: Макрос - Вывод на печать документы без логотипа в шапке страницы[РЕШЕНО]  (Прочитано 9025 раз)
0 Пользователей и 1 Гость смотрят эту тему.
wlad
Участник
**
Offline Offline

Сообщений: 20


« Ответ #15: 22 Февраль 2016, 18:57 »

Код:
Sub withoutLogos

Dim vEnum, oShape
vEnum = thisComponent.getDrawPage().createEnumeration()
Do While vEnum.hasMoreElements()
   oShape = vEnum.nextElement()
      If oShape.Name="Shape" Then oShape.Printable=false
Loop
ThisComponent.GraphicObjects.getByName("Grafik").Print=false
 createUnoService("com.sun.star.frame.DispatchHelper").executeDispatch(ThisComponent.CurrentController.Frame, ".uno:Print", "", 0, Array()) 
'после печати
oShape.Printable=true
ThisComponent.GraphicObjects.getByName("Grafik").Print=true
End Sub

 Так уже пробовал, но почему то на строке oShape.Printable=true выходит ошибка.
Записан
JohnSUN
Капитана в тот день называли на "ты"
Гуру
*******
Offline Offline

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


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


WWW
« Ответ #16: 22 Февраль 2016, 19:04 »

После нахождения нужного Shape и присвоения ему .Printable=false нужно вывалиться из цикла. Иначе Shape будет получать следующее значение пока все MoreElements не закончатся... И что там в нем окажется и как оно заругается на .Printable=true заранее неизвестно
Записан

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

Пол: Мужской
Сообщений: 3 068


iMac, LibreOffice и Apache OpenOffice


« Ответ #17: 22 Февраль 2016, 19:07 »

Так уже пробовал, но почему то на строке oShape.Printable=true выходит ошибка.
Да, упустил, после нахождения в цикле oShape, нужно выйти из цикла, исправьте в строке:
Код:
If oShape.Name="Shape" Then oShape.Printable=false : Exit Do
Записан

wlad
Участник
**
Offline Offline

Сообщений: 20


« Ответ #18: 22 Февраль 2016, 19:37 »

После нахождения нужного Shape и присвоения ему .Printable=false нужно вывалиться из цикла. Иначе Shape будет получать следующее значение пока все MoreElements не закончатся... И что там в нем окажется и как оно заругается на .Printable=true заранее неизвестно

Подскажите пожалуйста тогда как можно без операторов - Do While_Loop и If_Then,
Если заранее присвоить имя Shape например.
Вот так пробовал:
Код:
Sub PrintWithoutLogos

Dim vEnum, oShape
vEnum = thisComponent.getDrawPage().createEnumeration()
Do While vEnum.hasMoreElements()
   oShape = vEnum.nextElement()
      If oShape.Name="Shape" Then oShape.Printable=false : Exit Do
Loop
ThisComponent.GraphicObjects.getByName("Grafik").Print=false
 createUnoService("com.sun.star.frame.DispatchHelper").executeDispatch(ThisComponent.CurrentController.Frame, ".uno:Print", "", 0, Array()) 

oShape.Printable=true
ThisComponent.GraphicObjects.getByName("Grafik").Print=true
End Sub
Выдает ошибку на строке oShape.Printable=true

Вот так работает:
Код:
Sub PrintWithoutLogos
Dim vEnum, oShape
vEnum = thisComponent.getDrawPage().createEnumeration()
Do While vEnum.hasMoreElements()
   oShape = vEnum.nextElement()
      If oShape.Name="Shape" Then oShape.Printable=false : Exit Do
Loop
ThisComponent.GraphicObjects.getByName("Grafik").Print=false
 createUnoService("com.sun.star.frame.DispatchHelper").executeDispatch(ThisComponent.CurrentController.Frame, ".uno:Print", "", 0, Array()) 
Do While vEnum.hasMoreElements()
   oShape = vEnum.nextElement()
      If oShape.Name="Shape" Then oShape.Printable=true : Exit Do
Loop
ThisComponent.GraphicObjects.getByName("Grafik").Print=true
End Sub
Но Shape на печать не выводится, то есть значение остается false.

* test3.odt (774.63 Кб - загружено 9 раз.)
Записан
rami
Гуру
*******
Offline Offline

Пол: Мужской
Сообщений: 3 068


iMac, LibreOffice и Apache OpenOffice


« Ответ #19: 22 Февраль 2016, 20:05 »

Вот так работает:
Второй цикл не нужен. Первый нужен чтобы поймать объект в переменную, как поймали, сразу выходим из цикла, теперь переменная "oShape" до конца макроса будет связана с этим объектом (если не переназначим)
Записан

wlad
Участник
**
Offline Offline

Сообщений: 20


« Ответ #20: 23 Февраль 2016, 12:46 »

Спасибо всем за помощь!

Выкладываю рабочий код и тестовый файл с этим кодом

Код:
Sub PrintDialog

Dim vEnum, oShape
vEnum = thisComponent.getDrawPage().createEnumeration()
Do While vEnum.hasMoreElements()
   oShape = vEnum.nextElement()
      If oShape.Name="Shape" Then oShape.Printable=false : Exit Do
Loop
ThisComponent.GraphicObjects.getByName("Grafik").Print=false
 createUnoService("com.sun.star.frame.DispatchHelper").executeDispatch(ThisComponent.CurrentController.Frame, ".uno:Print", "", 0, Array())  

If oShape.Name="Shape" Then oShape.Printable=true
ThisComponent.GraphicObjects.getByName("Grafik").Print=true
End Sub

Макрос привязан к кнопке "PrintDialog" на панеле инструментов

Всего наилучшего!
wlad

* test4.odt (781.13 Кб - загружено 7 раз.)
« Последнее редактирование: 23 Февраль 2016, 13:00 от wlad » Записан
wlad
Участник
**
Offline Offline

Сообщений: 20


« Ответ #21: 1 Апрель 2016, 09:42 »

Sub PrintDialog

Dim vEnum, oShape
vEnum = thisComponent.getDrawPage().createEnumeration()
Do While vEnum.hasMoreElements()
   oShape = vEnum.nextElement()
      If oShape.Name="Shape" Then oShape.Printable=false : Exit Do
Loop
ThisComponent.GraphicObjects.getByName("Grafik").Print=false
 createUnoService("com.sun.star.frame.DispatchHelper").executeDispatch(ThisComponent.CurrentController.Frame, ".uno:Print", "", 0, Array())  

If oShape.Name="Shape" Then oShape.Printable=true
ThisComponent.GraphicObjects.getByName("Grafik").Print=true
End Sub

Привет всем!
Может кто-нибудь подсказать по регулярным выражением в StarBasic?
Хочу сделать чтобы в коде вместо Grafik, стояло GrafikX где Х - это от 1 до 9
также по анологии и с Shape.
Заранее Спасибо!

С уважением
wlad

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

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


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


WWW
« Ответ #22: 1 Апрель 2016, 13:09 »

Извини, не понял?.. Зачем для этой задачи такой заумный громоздкий инструмент, как регулярные выражения?
Цифровой индекс от 1 до 9 - это просто переменная коротенького цикла. Так? Например, For ind = 1 To 9

Строковая переменная, которой ты присваиваешь значение выражения "Grafik"+ind внутри этого цикла последовательно примет значения "Grafik1".."Grafik9". Верно?

Останется только убедиться, что такой GraphicObject у тебя есть. Если есть метод .getByName(), то обычно рядом с ним где-то присутствует .hasByName()... Ну, обычно так бывает.

И уж если .hasByName() вернул ИСТИНА, то тут хватаешь этот элемент с помощью .getByName() и делаешь с ним всё что надо...
Записан

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

Сообщений: 20


« Ответ #23: 1 Апрель 2016, 13:55 »

Извини, не понял?.. Зачем для этой задачи такой заумный громоздкий инструмент, как регулярные выражения?
Цифровой индекс от 1 до 9 - это просто переменная коротенького цикла. Так? Например, For ind = 1 To 9

Строковая переменная, которой ты присваиваешь значение выражения "Grafik"+ind внутри этого цикла последовательно примет значения "Grafik1".."Grafik9". Верно?

Останется только убедиться, что такой GraphicObject у тебя есть. Если есть метод .getByName(), то обычно рядом с ним где-то присутствует .hasByName()... Ну, обычно так бывает.

И уж если .hasByName() вернул ИСТИНА, то тут хватаешь этот элемент с помощью .getByName() и делаешь с ним всё что надо...

Спасибо за ответ!
Задумка у меня была изначально усовершенствовать немного макрос, чтобы он искал в документе не один объект Grafik, а несколько Grafik, Grafik1, Grafik2 и т.д до 9.
Записан
Страниц: « 1 2   Вверх
  Печать  
 
Перейти в:  

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