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

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

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

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

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


« Стартовое сообщение: 2 Февраль 2021, 08:44 »

Добрый день.
Сталкивался ли кто-нибудь с задачей вывода на печать указанных в макроса страниц.?
Процедура написанная на основе примера из руководства Питоньяка не работает, выводит только первую страницу из списка.
Код:
     Dim aPrn(1) as new com.sun.star.beans.PropertyValue
      aPrnList = Array(5, 6, 7, 8, 9)
      Dim CellRangeAddress(UBound(aPrnList)) As New com.sun.star.table.CellRangeAddress
    
      For ind=0 To UBound(aPrnList)
        oSheet = ThisComponent.Sheets(aPrnList(ind))
        CellRangeAddress(ind).Sheet = aPrnList(ind)
        CellRangeAddress(ind).StartColumn = 0
        CellRangeAddress(ind).StartRow = 0
        CellRangeAddress(ind).EndColumn = GetLastUsedColumn(oSheet)   ' GetLastUsedColumn - возвращает целое число
        CellRangeAddress(ind).EndRow = GetLastUsedRow(oSheet)          ' GetLastUsedRow  - возвращает целое число
        oSheet.setPrintAreas(Array())
        oSheet.setPrintAreas(CellRangeAddress())            
      Next  

 aPrn(0).Name  = "Wait" ' ожидать пока напечатается
 aPrn(0).Value = True
'          aPrn(1).Name  = "Pages"
'          aPrn(1).Value = "5-9"
 
 ThisComponent.Print(aPrn())

Если раскомментить "Pages" вообще пустой лист только выводится

« Последнее редактирование: 2 Февраль 2021, 11:57 от Sliv0210 » Записан
sokol92
Форумчанин
***
Offline Offline

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


WWW
« Ответ #1: 2 Февраль 2021, 12:50 »

У меня следующий макрос печатает 1-ю и 3-ю страницы активного листа.

Код:
Sub TestPrint
 Dim aPrn(1) as new com.sun.star.beans.PropertyValue
 aPrn(0).Name  = "Wait" ' ожидать пока напечатается
 aPrn(0).Value = True
 aPrn(1).Name  = "Pages"
 aPrn(1).Value = "1;3"
 ThisComponent.Print(aPrn())
End Sub

Проверьте наличие "галочки" в параметре LibreOffice Calc / Печать / Печатать только выбранные листы.
Также в предварительном просмотре проверьте свои параметры печати конкретного листа.
Записан

Владимир.
Sliv0210
Участник
**
Offline Offline

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


« Ответ #2: 2 Февраль 2021, 18:04 »

Видимо я неправильно описал проблему.
В книге 21 лист, на печать должны выводится только те, которые указаны в массиве aPrnList
Но увы... Печатается только 1 лист.
Записан
rami
Гуру
*******
Offline Offline

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


iMac, LibreOffice и Apache OpenOffice


« Ответ #3: 2 Февраль 2021, 18:31 »

Решение в этой теме вам не поможет?
Записан

sokol92
Форумчанин
***
Offline Offline

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


WWW
« Ответ #4: 2 Февраль 2021, 19:51 »

Или альтернатива к ответу #3 - выделяем листы и печатаем:

Код:
Sub TestPrint2
 Dim aPrn(0) as new com.sun.star.beans.PropertyValue
 Dim aSel(0) as new com.sun.star.beans.PropertyValue
 With createUnoService("com.sun.star.frame.DispatchHelper") 
    aSel(0).Name="Tables"
    aSel(0).Value=Array(0, 2)  ' номера листов для печати
    .executeDispatch(ThisComponent.CurrentController.Frame, ".uno:SelectTables", "", 0, aSel)
 End With   
 
 aPrn(0).Name  = "Wait" ' ожидать пока напечатается
 aPrn(0).Value = True
 ThisComponent.Print(aPrn())
End Sub

Записан

Владимир.
Bigor
Мастер
*****
Offline Offline

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


« Ответ #5: 2 Февраль 2021, 20:18 »

Цитата:
те, которые указаны в массиве aPrnList

Код:
Sub PrintList
Dim Props(0) As New com.sun.star.beans.PropertyValue

aPrnList = Array(1,3,5)


Props(0).Name="Pages"
Props(0).Value=Join(aPrnList,";")
ThisComponent.Print(Props())
End Sub
Записан

Поддержать разработчиков LibreOffice можно можно тут, а наш форум вот тут
Sliv0210
Участник
**
Offline Offline

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


« Ответ #6: 10 Февраль 2021, 06:22 »

Добрый день, компадрес!
Не помогло ничего из того, что советовали.
Или просто пустой лист или вся книга в целом (22 страницы)
Может это из-за того, что документ пришел из xls, который был открыт Calc-ом и сохранен как ods.
Пришлось решить эту проблему созданием pdf-файла с последующими выводом на печать и безжалостным убийством оного.
Все равно, спасибо всем за помощь. Всё хорошо
Записан
economist
Форумчанин
***
Offline Offline

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


« Ответ #7: 10 Февраль 2021, 08:19 »

@Sliv0210 - тут нет никакой мистики, вы просто не разобрались до конца.

Если Calc выводит пустые листы - нужно сбросить и пересоздать Область печати вручную (это быстрее чем выводить в PDF). В Excel она всегда существует (хотя бы одна). А в Calc их может не быть вовсе. Например, не все параметры принтеров (размеры запечатываемой области и полей) софту удается считать из драйвера принтера.

Все 4 макроса, даже ваш, - рабочие. Но в вашем цикл For Next задает область печати неправильно, т.к. скорее всего неверно определяются (им же) границы печатной области.
 
PS В похожих случаях часто грешат на "профиль". Если ошибка возникает только у одного пользователя - можно запустить Portable-версию LO, даже просто с флешки, и проверить.
Записан

Руб. за сто, что Питоньяк
Любит водку и коньяк!
Потому что мне, без оных, -
Не понять его никак...
Страниц: 1   Вверх
  Печать  
 
Перейти в:  

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