вывод диапазона на печать

Автор ishayahu, 20 мая 2011, 08:58

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

ishayahu

Как вывести на печать с помощью макроса только выбранный диапазон? Искал и по форуму, и в API - не нашел(
WinXP - OO3.3/LibreOffice3.3

RFJ

Формат - Диапазоны печати - Определить

smaharbA

RFJ - а ничего, что раздел Basic ?
Я конечно далек от мысли... (с)

RFJ

Макросы - Записать макрос
(с этим тоже нужно учиться работать)
и получим что-то вроде:


...
dispatcher.executeDispatch(document, ".uno:DefinePrintArea", "", 0, Array())
...



smaharbA

ну да и напечатать совсем другой лист или совсем другой документ
Я конечно далек от мысли... (с)

Рыбка Рио

Вот так должно вроде работать в 3.3/3.4 (но не работает почему-то, может это баг? )

REM  *****  BASIC  *****

Sub Main34
Dim prop(3) as new com.sun.star.beans.PropertyValue
prop(0).Name = "PrintContent"
prop(0).Value = 2
'prop(0).Name = "PageRange" ''IsOnlySelectedSheets, IsIncludeEmptyPages
'prop(0).Value = "1-4"
'prop(1).Name = "PrintRange"
'prop(1).Value = 0 '1
'prop(2).Name = "Copies"
'prop(2).Value = 1
'prop(3).Name = "Collate"
'prop(3).Value = False

ThisComponent.print(prop())
End Sub


Новые для 3.3 и 3.4 свойства можно посмотреть тут:
http://opengrok.libreoffice.org/xref/calc/sc/source/ui/unoobj/docuno.cxx#774
http://opengrok.libreoffice.org/xref/libs-gui/vcl/source/gdi/print3.cxx#345

Наверное, что-то не так делаю, почему-то не работает.
ubuntu 12.04 + LibO3.6.0

smaharbA

тут только setprintareas гонять туда - сюда, до и после печати
покрайней мере в 2.х так было
Я конечно далек от мысли... (с)

Рыбка Рио

ubuntu 12.04 + LibO3.6.0

Рыбка Рио

ubuntu 12.04 + LibO3.6.0

ishayahu

Почитал я все ссылки и что-то совсем ничего не понял. Ни один из примеров кода у меня все равно не работает(( Печатается в любом случае весь первый лист.
Я еще покурю мануалы по setprintareas, но если кто-нибудь сможет мне дать пример кода, буду очень благодарен. Например, для такого документа

[вложение удалено Администратором]
WinXP - OO3.3/LibreOffice3.3

ishayahu

Даже интереснее... Вот код:
REM  *****  BASIC  *****

Sub PrintAreas
dim selectedareas(0) as new com.sun.star.table.CellRangeAddress
Dim oDoc as object
Dim oSheet as object

oDoc=Thiscomponent 'The document running the macro

oSheet=ThisComponent.Sheets.getByName("1")
'selectedareas(0).sheet=0 'first sheet
selectedareas(0).startcolumn=0 'Col A
selectedareas(0).startrow=0 ' Row 1 (zero based index)
selectedareas(0).endcolumn=2 ' Col C
selectedareas(0).endrow=4 ' Row 10
'oSheet=oDoc.Sheets(0)
oSheet.setprintareas(selectedareas()) ' set the print area on the sheet
oDoc.Print(Array()) ' print to default printer

'REMOVE PRINT AREAS

oSheet.setprintareas(array())
oSheet=ThisComponent.Sheets.getByName("1")
oSheet.setprintareas(array())
End Sub

Если запускать его через F5, то он не работает. Если же пройтись по нему с помощью F8, то все срабатывает как надо...
В чем может быть дело? Печатаю не на принтер, а в .xps, смотрю черзе IE. Думал, может из-за кеша - то даже если создать новый файл косяк остается при F5, и все равно все работает при F8
Проверю еще на другом компе, но как-то странно...
WinXP - OO3.3/LibreOffice3.3


ishayahu

Что-то я не понял... Судя по ссылке мне надо лишь дописать createUnoService("com.sun.star.sheet.GlobalSheetSettings").PrintAllSheets=True
но результат все равно тот же самый(( Что-то я не догоняю(  ???
WinXP - OO3.3/LibreOffice3.3

Рыбка Рио

#13
Цитата: ishayahu от 22 мая 2011, 18:07Даже интереснее... Вот код:
Вот такой вариант у меня работает:
REM ***** BASIC *****
Sub PrintAreas
Dim oDoc as object
Dim oSheet as object
oDoc=Thiscomponent 'The document running the macro
oSheet=ThisComponent.Sheets.getByName("1")
oCellRangeAddress = oSheet.getCellRangeByName("A1:B2").RangeAddress
oSheet.setprintareas(Array(oCellRangeAddress)) ' set the print area on the sheet
oDoc.Print(Array()) ' print to default printer
'REMOVE PRINT AREAS
oSheet.setprintareas(array())
End Sub
(Но у него есть недостаток: он удаляет все заранее заданные диапазоны.)
ubuntu 12.04 + LibO3.6.0

Рыбка Рио

Цитата: ishayahu от 22 мая 2011, 21:16Что-то я не понял... Судя по ссылке мне надо лишь дописать
Код:

createUnoService("com.sun.star.sheet.GlobalSheetSettings").PrintAllSheets=True

но результат все равно тот же самый(( Что-то я не догоняю(  Непонимающий
Это наверное для версии 3.2 и более ранних. Там был другой модуль печати, поэтому многое что касается печати и было написно до выхода 3.3 в новых версиях не работает.
ubuntu 12.04 + LibO3.6.0