Печать заданных страниц в книге

Автор Sliv0210, 2 февраля 2021, 08:44

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

Sliv0210

Добрый день.
Сталкивался ли кто-нибудь с задачей вывода на печать указанных в макроса страниц.?
Процедура написанная на основе примера из руководства Питоньяка не работает, выводит только первую страницу из списка.

     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" вообще пустой лист только выводится


sokol92

У меня следующий макрос печатает 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

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


sokol92

Или альтернатива к ответу #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

Цитироватьте, которые указаны в массиве 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

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

economist

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

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

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

PS В похожих случаях часто грешат на "профиль". Если ошибка возникает только у одного пользователя - можно запустить Portable-версию LO, даже просто с флешки, и проверить.
Руб. за сто, что Питоньяк
Любит водку и коньяк!
Потому что мне, без оных, -
Не понять его никак...