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

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

26 Июль 2017, 13:42 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

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

Сообщений: 8


« Стартовое сообщение: 28 Июнь 2017, 11:33 »

Сделал скрипт (данные - транспортировать в другой лист, печать) но не могу вписать в скрипт сразу печать текущего листа, попадаю в меню печати, что не совсем удобно

rem ----------------------------------------------------------------------
dispatcher.executeDispatch(document, ".uno:Print", "", 0, Array())   

Записан
JohnSUN
Капитана в тот день называли на "ты"
Гуру
*******
Offline Offline

Пол: Мужской
Расположение: Киев
Сообщений: 2 294


Помогаю людям и компьютерам понимать друг друга


WWW
« Ответ #1: 28 Июнь 2017, 12:01 »

Привет, terminal, и добро пожаловать на форум!
Согласен, это совсем неудобно.
Только скажи сначала - а как ты транспонируешь данные в другой лист? Покажешь файл со всем скриптом?
Записан

Владислав Орлов aka JohnSUN
Благодарить-не зазорно.
Подарить благо создателям офиса, нашему ресурсу, мне
terminal
Новичок
*
Offline Offline

Сообщений: 8


« Ответ #2: 28 Июнь 2017, 12:17 »

файл - это база ремонтов, дата, клиент, телефон, стройство, модель, поломка (все на одном листе, впысываеться строками)
потом транспортирую в квитанцию (вертикальная) с последующей печатью
сделал макрос, кнопку но есть еще проблема с выбором листа и страницы (неудобно)

вот и вопрос как сделать скрипт печати текущего листа
Записан
JohnSUN
Капитана в тот день называли на "ты"
Гуру
*******
Offline Offline

Пол: Мужской
Расположение: Киев
Сообщений: 2 294


Помогаю людям и компьютерам понимать друг друга


WWW
« Ответ #3: 28 Июнь 2017, 13:11 »

Сделать-то его не очень сложно - не раз делалось. Например, перебрать все листы книги, запоминая их статус видимости, затем скрыть все, кроме печатаемого, дать команду печати и восстановить предыдущую видимость... Или так, как у Питоньяка в  6.24. Print a Calc range

Но для такой задачи уже найдено альтернативное решение - область печати назначается только на квитанцию: кто бы и как бы не пытался напечатать всю книгу всегда будет получать квитанцию. Тогда и квитанцию можно заполнить не макросом, а одними только формулами VLOOKUP().
Записан

Владислав Орлов aka JohnSUN
Благодарить-не зазорно.
Подарить благо создателям офиса, нашему ресурсу, мне
terminal
Новичок
*
Offline Offline

Сообщений: 8


« Ответ #4: 28 Июнь 2017, 13:32 »

перебрать все листы книги, запоминая их статус видимости, затем скрыть все, кроме печатаемого - как это сделать?
Записан
JohnSUN
Капитана в тот день называли на "ты"
Гуру
*******
Offline Offline

Пол: Мужской
Расположение: Киев
Сообщений: 2 294


Помогаю людям и компьютерам понимать друг друга


WWW
« Ответ #5: 28 Июнь 2017, 13:58 »

Ну, в далёком 2008-ом это делалось так. С тех пор мало что изменилось (в этой области)
Записан

Владислав Орлов aka JohnSUN
Благодарить-не зазорно.
Подарить благо создателям офиса, нашему ресурсу, мне
Rafik
Новичок
*
Offline Offline

Сообщений: 42


« Ответ #6: 28 Июнь 2017, 14:56 »

Вроде, как бы ThisComponent.print(Array()) выводит на печать активный лист. Если требуется задать количество экземпляров, конкретные страницы или выделенную часть,  то можно вместо Array() указать описание этих параметров в формате com.sun.star.beans.PropertyValue
Записан
terminal
Новичок
*
Offline Offline

Сообщений: 8


« Ответ #7: 30 Июнь 2017, 11:19 »

Вот скрипт
все равно выводит все листы

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

sub prr
rem ----------------------------------------------------------------------
rem define variables
dim document   as object
dim dispatcher as object
rem ----------------------------------------------------------------------
rem get access to the document
document   = ThisComponent.CurrentController.Frame
dispatcher = createUnoService("com.sun.star.frame.DispatchHelper")

rem ----------------------------------------------------------------------
dispatcher.executeDispatch(document, ".uno:Copy", "", 0, Array())

rem ----------------------------------------------------------------------
dim args2(0) as new com.sun.star.beans.PropertyValue
args2(0).Name = "aTableName"
args2(0).Value = "ремонти"

dispatcher.executeDispatch(document, ".uno:Hide", "", 0, args2())

rem ----------------------------------------------------------------------
dim args3(0) as new com.sun.star.beans.PropertyValue
args3(0).Name = "ToPoint"
args3(0).Value = "$C$6:$C$19"

dispatcher.executeDispatch(document, ".uno:GoToCell", "", 0, args3())

rem ----------------------------------------------------------------------
dim args4(5) as new com.sun.star.beans.PropertyValue
args4(0).Name = "Flags"
args4(0).Value = "SVD"
args4(1).Name = "FormulaCommand"
args4(1).Value = 0
args4(2).Name = "SkipEmptyCells"
args4(2).Value = false
args4(3).Name = "Transpose"
args4(3).Value = true
args4(4).Name = "AsLink"
args4(4).Value = false
args4(5).Name = "MoveMode"
args4(5).Value = 4

dispatcher.executeDispatch(document, ".uno:InsertContents", "", 0, args4())

rem ----------------------------------------------------------------------
dispatcher.executeDispatch(document, ".uno:PrintDefault", "", 0, Array())

rem ----------------------------------------------------------------------
dim args6(0) as new com.sun.star.beans.PropertyValue
args6(0).Name = "aTableName"
args6(0).Value = "ремонти"

dispatcher.executeDispatch(document, ".uno:Show", "", 0, args6())


end sub
Записан
Rafik
Новичок
*
Offline Offline

Сообщений: 42


« Ответ #8: 1 Июль 2017, 10:48 »

"Ничего не понимаю" (с), "то ли лыжи не едут..."(с). Короче, не понял зачем куда-то копировать-вставлять и оттуда печатать. Не проще ли сделать 1:1 как у Питоньяка (см. совет от JohnSUN). Пример  6.24. Print a Calc range задает диапазон печати и выводит на принтер. Простенько и надежно.
Записан
terminal
Новичок
*
Offline Offline

Сообщений: 8


« Ответ #9: 2 Июль 2017, 11:05 »

когда так делаю, все рано макрос попадает в меню принтера
Записан
Rafik
Новичок
*
Offline Offline

Сообщений: 42


« Ответ #10: 3 Июль 2017, 08:51 »

когда так делаю, все рано макрос попадает в меню принтера
Попробуй вместо
dispatcher.executeDispatch(document, ".uno:PrintDefault", "", 0, Array())
поставить ThisComponent.print(Array()) и никакого диалога принтера не будет.У Питоньяка в 6.24 стоит именно эта команда, а не вызов диспетчера (как в твоем макросе). ThisComponent.print(Array()) без всяких диалогов "втихую" выводит на принтер, который привязан к документу. Для привязки принтера: Файл - Настройки принтера и сохранить.
Записан
terminal
Новичок
*
Offline Offline

Сообщений: 8


« Ответ #11: 5 Июль 2017, 10:11 »

с принтером вышло, но теперь другая проблема, пишу скрипт чтобы печатоло только 1 страницу, всранво печатает все
Записан
Rafik
Новичок
*
Offline Offline

Сообщений: 42


« Ответ #12: 5 Июль 2017, 11:16 »

Попробуй так:
Код:
Sub PrintDoc1(oDoc As object,cPages As String,nCount As Integer)
' Параметры: Ссылка_на_документ, страницы_для_печати, кол-во_экземпляров
' страницы_для_печати: пустая_строка "" - все,
' страницы перечисляются через запятую, диапазоны страниц — через тире
' например "1,3-6" - первая и с третьей по шестую
Dim Props(2) As New com.sun.star.beans.PropertyValue
Props(0).Name="Pages"
Props(0).Value=cPages
Props(1).Name="CopyCount"
Props(1).Value=nCount
Props(2).Name = "Collate"
If nCount = 1 Then ' Включить разбор по копиям, если кол-во экз. <>1
    Props(2).Value = False
Else
    Props(2).Value = True
End If
oDoc.Print(Props())
End Sub
Записан
terminal
Новичок
*
Offline Offline

Сообщений: 8


« Ответ #13: 24 Июль 2017, 14:22 »

не работает и все

другой вопрос
таблица : вводим фамилию в одну ячейку, в следующую - телефон
как сделать чтобы при повторном вводе фамилий (другой день) высвечивался номер телефона клиента в следующей ячейке?

 
Записан
economist
Ветеран
*****
Offline Offline

Сообщений: 602


« Ответ #14: 24 Июль 2017, 15:52 »

Тут нужно написать несложную формулу с функцией =ВПР() (или =VLOOKUP() если это OpenOffice)

Данная функция обязательна к пониманию и изучению, это самая важная функция эл. таблиц.
Её незнание - у нас означает "непрохождение" ежегодной аттестации и влечет за собой увольнение. В принципе только такой подход позволил уйти от "мартышкиного" труда. Кол-во уволенных по данной "статье" за 15 лет - 3.
Записан

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

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