нужен макрос для печати

Автор ks412, 23 февраля 2011, 12:48

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

ks412

подскажите макрос. надо наложить его на изображение. при нажатии на картинку выводил на печать текшую страницу или страницу 1.

mathnew

Макрос, печатающий некую область на Листе1 при нажатии на картинку.
Пример файла приложен.

Sub DMCOMP
  Dim selArea(0) as new com.sun.star.table.CellRangeAddress

  oDoc = Thiscomponent
  oSheets = ThisComponent.Sheets

' Печать с выбором области печати на листе
'nStC=0 ' начальная колонка
'nStR=0 ' начальная строка
'nEndC=10 ' конечная колонка
'nEndR=20 ' конечная строка

  selArea(0).StartColumn = 0
  selArea(0).StartRow = 0
  selArea(0).EndColumn = 100
  selArea(0).EndRow = 100

  oSheet=ThisComponent.Sheets.getByName("Лист1")
  oSheet.setPrintareas(selArea())
  oDoc.Print(Array())
End Sub


[вложение удалено Администратором]

mathnew

В макросе строку
oSheet=ThisComponent.Sheets.getByName("Лист1")
лучше заменить на
oSheet=oSheets.getByName("Лист1")

PS. Чтобы повторно не вызывать ThisComponent.

raptor

#3
Если область печати не нужно задавать, то макрос может быть таким.
(Добавлено "до кучи" еще количество печатаемых копий.)

Sub DMCOMP
   Dim args(1) as new com.sun.star.beans.PropertyValue

   oDoc=ThisComponent

   args(0).Name = "CopyCount"         'Количество печатаемых копий активного листа = 2
   args(0).Value = 2

   oDoc.print(args())
End Sub

radius

Цитата: raptor от 25 февраля 2011, 13:26
(Добавлено "до кучи" еще количество печатаемых копий.)

А как задавать количество копий? Один раз и навсегда вбить в макрос?

RFJ

Функция InputBox (см Справку).

tangichhan

Доброго времени, уважаемые знатоки, обращаюсь к вам за помощью.
Имеет два принтера в системе. Один настроен как принтер по умолчанию (Printer 1), второй нет с именем (Printer 2). Имеется документ, который нужно печатать только на Printer 2 и при этом выводить 2 копии.
Нашел ваш код, попробовал изменить по свои нужды, но успеха не добился, что сделал не так?

Sub DMCOMP
  Dim args(1) as new com.sun.star.beans.PropertyValue

  oDoc=ThisComponent

  args(0).Name = "CopyCount"         'Количество печатаемых копий активного листа = 2
  args(0).Value = 2
  args(1).Name = "Name"
  args(1).Value = "Printer 2"
  oDoc.print(args())
End Sub

Помогите пожалуйста.

Rafik

Посмотри тему http://forumooo.ru/index.php/topic,6509.0.html
Она огромная, там, где-то ближе к концу, есть решение как направить документ на принтер, который не стоит по умолчанию. В той же теме есть макрос, позволяющий выбирать, через диалог, печатаемый(е) файл(ы).

tangichhan

Цитата: Rafik от 29 ноября 2017, 07:12
Посмотри тему http://forumooo.ru/index.php/topic,6509.0.html
Она огромная, там, где-то ближе к концу, есть решение как направить документ на принтер, который не стоит по умолчанию. В той же теме есть макрос, позволяющий выбирать, через диалог, печатаемый(е) файл(ы).
Добрый день. данный вариант не подходит для нас, нам не нужен диалог для печати. Нужно просто выполнять команду на печать с определенного принтера и двух копий.
Такое действие может выполнить?

Rafik

В процедуре DMCOMP вместо строки oDoc=ThisComponent вставить этот фрагмент
' Создадим дектоп для открытия печатаемого файла
         Set oDesk = createUnoService("com.sun.star.frame.Desktop")

  ' полное имя файла, который необходимо печатать(путь+название файла с расширением)
' для получения sUrl можно добавить диалог открытия файла
' или перебор файлов в текущей (или какой-либо папке)
 sUrl = "путь\и\имя\файла\для\печати"

 ' Теперь загрузим документ.
 Dim oProps(0) as New com.sun.star.beans.PropertyValue  ' нужен для задания свойств документа
 ' Здесь задается в каком виде (видимый/невидимый) загружается
 oProps(0).Name = "Hidden"
 oProps(0).Value = bHidden 'False - Видимый, True - Скрытый
 oDoc = oDesk.LoadComponentFromUrl(sUrl, "_blank", 63, oProps())
где в строке sUrl = "путь\и\имя\файла\для\печати" указать полное имя файла, который требуется напечатать. Полное имя подразумевает: полный путь, начиная с имени диска(или корня для линукс)+название файла с расширением.

Переделанный макрос разместить в отдельном документе, например "печать файла.odt". В этот же документ вставить кнопку, привязать к ней макрос. Там же через меню "Файл"-"Настройка принтера" указать нужный принтер и "файл"-"сохранить". Документ для печати файла настроен и готов к работе. При повторном открытии этот документ автоматически подцепит тот принтер, на который был настроен при предыдущем использовании.

bigor

tangichhan попробуй так
Sub DMCOMP
   Dim args(1) as new com.sun.star.beans.PropertyValue
   PrintName = "Имя второго принтера в системе"
   oDoc=ThisComponent

   args(0).Name = "CopyCount"         'Количество печатаемых копий активного листа = 2
   args(0).Value = 2
   args(1).Name = "Name"
   args(1).Value = "<" & PrintName & ">"

  oPrinter = oDoc.getPrinter()
  For i = LBound(oPrinter) to UBound(oPrinter)
  If oPrinter(i).Name = "Name" Then
    oPrinter(i).Value = PrintName
  End If
Next i

oDoc.setPrinter(oPrinter)


   oDoc.print(args())
End Sub


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

tangichhan

Цитата: Bigor от 30 ноября 2017, 22:09
tangichhan попробуй так
Sub DMCOMP
   Dim args(1) as new com.sun.star.beans.PropertyValue
   PrintName = "Имя второго принтера в системе"
   oDoc=ThisComponent

   args(0).Name = "CopyCount"         'Количество печатаемых копий активного листа = 2
   args(0).Value = 2
   args(1).Name = "Name"
   args(1).Value = "<" & PrintName & ">"

  oPrinter = oDoc.getPrinter()
  For i = LBound(oPrinter) to UBound(oPrinter)
  If oPrinter(i).Name = "Name" Then
    oPrinter(i).Value = PrintName
  End If
Next i

oDoc.setPrinter(oPrinter)


   oDoc.print(args())
End Sub



Спасибо за помощь. Благодарен. Все замечательно работает