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

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

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

RFJ

#15
Цитата: Клио от 22 мая 2011, 22:24
Цитата: 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
(Но у него есть недостаток: он удаляет все заранее заданные диапазоны.)
Так он и должен удалять все заданные диапазоны.
Чтобы не удалялся заданный Вами диапазон, перенесите этот код в начало макроса.
Чтобы не удалялся никакой диапазон, вообще удалите этот код.

Рыбка Рио

Вот такой макрос напечатает выделенные ячейки (и оставит все диапазоны печати как были):
REM ***** BASIC *****

Sub PrintAreas
Dim oDoc as object
Dim oSheet as object
oDoc=ThisComponent
oSheet=oDoc.CurrentController.ActiveSheet
oCellRangeAddress = oDoc.CurrentSelection.RangeAddress
'oCellRangeAddress = oSheet.getCellRangeByName("A1:B2").RangeAddress
PA=oSheet.PrintAreas
oSheet.setPrintAreas(Array(oCellRangeAddress)) ' set the print area on the sheet
oDoc.Print(Array()) ' print to default printer
'RESTORE PRINT AREAS
oSheet.setPrintAreas(PA)
End Sub
ubuntu 12.04 + LibO3.6.0

Рыбка Рио

Цитата: RFJ от 23 мая 2011, 09:49Чтобы не удалялся никакой диапазон, вообще удалите этот код.
Нет, нужно восстановить старые диапазоны, а иначе у вас все диапазоны удалятся и добавится тот, который вы напечатали в прошлый раз.
ubuntu 12.04 + LibO3.6.0

Рыбка Рио

Но в любом случае, это не совсем нормальный способ печати выделенных диапазонов, т.к. есть API для печати выделенных ячеек, которое не работает (почему-то).
ubuntu 12.04 + LibO3.6.0

ishayahu

#19
Вариант Клио у меня работает, а RFJ нет(

Но теперь другой вопрос: как совместить печать диапазаона с передачей других параметров print`у?
То есть надо объединить два куска кода:
REM вывод на печать
CellRangeName = "A1:F"+CStr(I-1)
CellRangeAddress = oSheet.getCellRangeByName(CellRangeName).RangeAddress
Sheet.setprintareas(Array(CellRangeAddress)) ' set the print area on the sheet
Doc.Print(Array()) ' print to default printer
'REMOVE PRINT AREAS
Sheet.setprintareas(array())

и
PrintProperties(0).Name = "Wait"
PrintProperties(0).Value = True
PrintProperties(1).Name = "PaperOrientation"
PrintProperties(1).Value = com.sun.star.view.PaperOrientation.LANDSCAPE
Doc.print(PrintProperties())

Спасибо за помощь!
WinXP - OO3.3/LibreOffice3.3