Не печатает

Автор Graveworm, 29 февраля 2012, 17:47

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

Graveworm

Здравствуйте, помогите пожалуйста. При вызове макроса со страницы "Лист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

JohnSUN

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

Graveworm

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

neft

JohnSUN, видимо, имел в виду:
selArea(0).Sheet = ... (Номер листа)

Graveworm

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

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


JohnSUN

Попробуй-ка так:
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

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

neft

Ай, как нехорошо, то неактивный - то активный - то опять неактивный.

JohnSUN

Зато наглядно  :roll:
Вас Осиповых не разберёшь: ты говоришь "Не хорошо..."
Владислав Орлов aka JohnSUN
Благодарить-не зазорно.
Подарить благо создателям офиса, нашему ресурсу, мне

Graveworm

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

JohnSUN

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

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

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

Graveworm

так работает, мигание даже не напрягает, спасибо!