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

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

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

Войти
Новости: Здесь можно поблагодарить участников форума Улыбка
 
   Начало   Помощь Поиск Войти Регистрация    задать вопрос  
Страниц: 1   Вниз
  Печать  
Автор Тема: Не печатает  (Прочитано 4002 раз)
0 Пользователей и 1 Гость смотрят эту тему.
Graveworm
Новичок
*
Offline Offline

Сообщений: 12


« Стартовое сообщение: 29 Февраль 2012, 16:47 »

Здравствуйте, помогите пожалуйста. При вызове макроса со страницы "Лист1" печать не происходит (а надо), для этого макрос нужно выполнять непосредственно при активной странице "Лист2". Что у меня не правильно в коде?
Код:
Sub DMCOMP
  Dim selArea(0) as new com.sun.star.table.CellRangeAddress

  oDoc = Thiscomponent
  oSheets = ThisComponent.Sheets

  selArea(0).StartColumn = 0
  selArea(0).StartRow = 0
  selArea(0).EndColumn = 10
  selArea(0).EndRow = 126

  oSheet=oSheets.getByName("Лист2")
  oSheet.setPrintareas(selArea())
  oDoc.Print(Array())
End Sub
« Последнее редактирование: 29 Февраль 2012, 17:14 от Graveworm » Записан
JohnSUN
Капитана в тот день называли на "ты"
Гуру
*******
Offline Offline

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


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


WWW
« Ответ #1: 29 Февраль 2012, 17:02 »

Добрый день!
ИМХО, область печати задана почти правильно. Не хватило одной строки - присвоения Sheet (номера листа). Вся структура CellRangeAddress состоит из пяти полей. По умолчанию поле Sheet остается нулевым, то есть указывает на Лист1 или какой там первый в книге.
Записан

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

Сообщений: 12


« Ответ #2: 29 Февраль 2012, 17:15 »

пардон, подправил:
Код:
oSheet=oSheets.getByName("Лист2")
Если речь идет об этом, то у меня так и было.
Записан
neft
Постоялец
***
Offline Offline

Сообщений: 189


« Ответ #3: 29 Февраль 2012, 17:24 »

JohnSUN, видимо, имел в виду:
selArea(0).Sheet = ... (Номер листа)
Записан
Graveworm
Новичок
*
Offline Offline

Сообщений: 12


« Ответ #4: 29 Февраль 2012, 17:34 »

Код:
Sub DMCOMP
  Dim selArea(0) as new com.sun.star.table.CellRangeAddress

  oDoc = Thiscomponent
  oSheets = ThisComponent.Sheets

  selArea(0).StartColumn = 0
  selArea(0).StartRow = 0
  selArea(0).EndColumn = 10
  selArea(0).EndRow = 126
  selArea(0).Sheet = 1                       ' добавил

  oSheet=oSheets.getByName("Лист2")
  oSheet.setPrintareas(selArea())
  oDoc.Print(Array())
End Sub
Не работает
Записан
JohnSUN
Капитана в тот день называли на "ты"
Гуру
*******
Offline Offline

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


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


WWW
« Ответ #5: 29 Февраль 2012, 18:02 »

Последнее "Не работает" к чему относится? Вообще ничего не печатает? Печатает все листы?
Что сейчас в настройках принтера по умолчанию стоит? А то помню был случай, листов 200 тестовых распечаток упало на какой-то дальний сетевой принтер, а на локальный, который под боком стоит - не идет печать, хоть тресни... Часов пять код отлаживал, а оказалось кто-то изменил "принтер по умолчанию".
Записан

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

Сообщений: 189


« Ответ #6: 29 Февраль 2012, 18:59 »

Печать НЕ активного листа в Calc
Записан
JohnSUN
Капитана в тот день называли на "ты"
Гуру
*******
Offline Offline

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


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


WWW
« Ответ #7: 29 Февраль 2012, 19:05 »

Попробуй-ка так:
Код:
Sub DMCOMP
Dim selArea(0) as new com.sun.star.table.CellRangeAddress
Dim prnOptions(1) as new com.sun.star.beans.PropertyValue

oDoc = Thiscomponent
oSheets = oDoc.Sheets

selArea(0).StartColumn = 0
selArea(0).StartRow = 0
selArea(0).EndColumn = 10
selArea(0).EndRow = 126
selArea(0).Sheet = 1

prnOptions(0).Name = "CopyCount"
prnOptions(0).Value = 1
prnOptions(1).Name = "Wait"
prnOptions(1).Value = True

currentSheet = oDoc.getCurrentSelection().getSpreadsheet()
oSheet=oSheets.getByName("Лист2")
oDoc.getCurrentController().setActiveSheet(oSheet)
oSheet.setPrintareas(selArea())
oDoc.Print(prnOptions)
oDoc.getCurrentController().setActiveSheet(currentSheet)
End Sub
Если сработает - попробуем разобраться почему это произошло  Смеющийся
Записан

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

Сообщений: 189


« Ответ #8: 29 Февраль 2012, 19:52 »

Ай, как нехорошо, то неактивный - то активный - то опять неактивный.
Записан
JohnSUN
Капитана в тот день называли на "ты"
Гуру
*******
Offline Offline

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


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


WWW
« Ответ #9: 29 Февраль 2012, 20:26 »

Зато наглядно  Да уж...
Вас Осиповых не разберёшь: ты говоришь "Не хорошо..."
Записан

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

Сообщений: 12


« Ответ #10: 1 Март 2012, 09:32 »

Последнее "Не работает" к чему относится?...
Не печатает неактивный лист, нужно на него перейти и запустить макрос, лишь тогда сработает. Принтер по умолчанию нужный стоит.
Если в параметрах убрать отметку "Печать только выбранные листы" то печатается как целевой лист, так и активный, с которого макрос запускаю. Причем, эта отметка восстанавливает своё значение.
JohnSUN, Ваш макрос не срабатывает:
Код:
oDoc.Print(prnOptions)
Синтаксическая ошибка. Спецификации размерности не соответствуют друг другу.
Записан
JohnSUN
Капитана в тот день называли на "ты"
Гуру
*******
Offline Offline

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


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


WWW
« Ответ #11: 1 Март 2012, 10:02 »

Упс! А что у тебя за офис? У меня и OOo pro и LiO эту строчку съели не глядя...
Попробуй добавить скобки после prnOptions - oDoc.Print(prnOptions()) - типа, точно массив передаем...

Но neft прав - правильнее, наверное, пробегаться по всем листам и сбрасывать области печати, выставлять область печати только на нужном листе и взводить параметр "Печатать все листы". Тогда команда "Печать" сработает только для нужного диапазона, а листы на экране мигать не будут.

Но если мигание листов не мешает, можно допилить то, что уже сделано
Записан

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

Сообщений: 12


« Ответ #12: 1 Март 2012, 10:45 »

так работает, мигание даже не напрягает, спасибо!
Записан
Страниц: 1   Вверх
  Печать  
 
Перейти в:  

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