[решено]Печать скрытых листов и кнопка с условиями

Автор njuton89, 25 мая 2015, 21:59

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

njuton89

Доброго времени суток, гуру свободного офиса.
Вопрос вот в чем, есть лист на котором производится ввод данных для произведения расчетов.
На скрытом листе есть таблица в которую заносится все что посчитано. Нужно чтобы при нажатии на кнопку производилась печать именно этого скрытого листа.
Печать листа реализована таким кодом
Sub DMCOMP
Dim selArea(0) as new com.sun.star.table.CellRangeAddress
Dim prnOptions(1) as new com.sun.star.beans.PropertyValue

oDoc = Thiscomponent
oSheets = oDoc.Sheets

selArea(0).StartColumn = 0
selArea(0).StartRow = 0
selArea(0).EndColumn = 7
selArea(0).EndRow = 88
selArea(0).Sheet = 1

prnOptions(0).Name = "CopyCount"
prnOptions(0).Value = 1
prnOptions(1).Name = "Wait"
prnOptions(1).Value = True

currentSheet = oDoc.getCurrentSelection().getSpreadsheet()
oSheet=oSheets.getByName("rozrahunok")
oDoc.getCurrentController().setActiveSheet(oSheet)
oSheet.setPrintareas(selArea())
   oDoc.Print(prnOptions)
oDoc.getCurrentController().setActiveSheet(currentSheet)
End Sub


Проблема в том, что когда лист который должен быть напечатан - скрыт, то на печать идет первый не скрытый лист.
Как организовать так чтобы печатался именно тот скрытый лист? Помогите пожалуйста.

Yakov

Снять скрытие - распечатать - скрыть?

njuton89

#2
Цитата: Yakov от 25 мая 2015, 20:17Снять скрытие - распечатать - скрыть?
Да. Можно это как то реализовать?

njuton89

Вот что мне выдал макрорекордер
REM  *****  BASIC  *****


sub Main
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 ----------------------------------------------------------------------
dim args1(0) as new com.sun.star.beans.PropertyValue
args1(0).Name = "aTableName"
args1(0).Value = "Лист2"

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


end sub


Этот код прячет лист. Можна зделать такой же код на видимость листа и внедрить в верхний который печатает.

Но получается что когда документ защищен, этот код не срабатывает.
А защита нужна чтоб юзер увидел результат расчета уже только в печатанном виде.
Может можна зделать такую последовательность "снять защиту листа-зделать видимым лист-распечатать-спрятать лист-защитить документ?

rami

Цитата: njuton89 от 25 мая 2015, 19:59Вопрос вот в чем, есть лист на котором производится ввод данных для произведения расчетов.
На скрытом листе есть таблица в которую заносится все что посчитано. Нужно чтобы при нажатии на кнопку производилась печать именно этого скрытого листа.
Если можете, выложите документ, если нет, то подробней опишите сколько диапазонов нужно распечатать? В каком по порядку листе находится диапазон печати(отсчёт от нуля)?
Моя идея заключается в том, чтобы все постоянные параметры "жёстко забить" в документ, а на кнопку повесить "худосочный" макрос запуска печати с одним параметром. Если скрытый лист с диапазоном печати всегда будет самый первый, то всё должно быть просто.

Макрорекордер отдыхает 8-)

JohnSUN

Цитата: rami от 26 мая 2015, 13:10
Если скрытый лист с диапазоном печати всегда будет самый первый, то всё должно быть просто.
Можешь начинать отлаживать макрос - первый или не первый, а имя у скрытого листа будет "rozrahunok"
ЦитироватьoSheet=oSheets.getByName("rozrahunok")
Я бы вообще проверил наличие скрытых листов в книге. Если нет - печатай что хочешь обычными средствами. Если есть - инвертировать IsVisible=not IsVisible у всех листов, отработать "печать всего" и опять инвертировать...
Владислав Орлов aka JohnSUN
Благодарить-не зазорно.
Подарить благо создателям офиса, нашему ресурсу, мне

njuton89

#6
Цитата: rami от 26 мая 2015, 11:10Если можете, выложите документ, если нет, то подробней опишите сколько диапазонов нужно распечатать? В каком по порядку листе находится диапазон печати(отсчёт от нуля)?
Моя идея заключается в том, чтобы все постоянные параметры "жёстко забить" в документ, а на кнопку повесить "худосочный" макрос запуска печати с одним параметром. Если скрытый лист с диапазоном печати всегда будет самый первый, то всё должно быть просто.

Макрорекордер отдыхает Крутой
Добрый день. Вот файл примера.
Листы будут точто в том порядке как там они сейчас есть.
Будут скрыты листы "vutyag", "rozrahunok", "dodatki", 'Житомирська'.
На печать нужно выводить листы "vutyag" и "rozrahunok".

Буду очень признателен в помощи.

JohnSUN

Пока будет готов макрос, несколько замечаний советов по книге.
У тебя в kategoria битая ссылка. Надеюсь, это только в порезанном примере.
Длиннющую формулу для Кр1 можно сократить, если использовать не IF(), а MAX():
=MAX(ROUND((((((F14*F18)/(F4*F3*F9*F10))-1)*(F19-F20))/F19)+1;4);1)
И префикс osnovna. в формуле сейчас не нужен, поскольку она находится здесь же, на листе osnovna.
Не стесняйся использовать проверку орфографии - у тебя на Zapovnyty попадаются Місцерозташування и Сернтифікований
Владислав Орлов aka JohnSUN
Благодарить-не зазорно.
Подарить благо создателям офиса, нашему ресурсу, мне

rami

#8
Цитата: njuton89 от 26 мая 2015, 12:15Листы будут точто в том порядке как там они сейчас есть.
Будут скрыты листы "vutyag", "rozrahunok", "dodatki", 'Житомирська'.
На печать нужно выводить листы "vutyag" и "rozrahunok".
Самое главное — будут изменять структуру документа или нет. Вы говорите, что нет. Это сильно упрощает задачу.

Проверьте мой вариант. Если он в принципе подходит, то мы допилим остальное (диапазоны, результат распечатки и т.д.)

JohnSUN

Изящно!  :beer:
Только, наверное, "3-5"
Опять же, нам никто не запрещает именно их ("vutyag" и "rozrahunok") сразу сдвинуть в начало книги и указать "1-3"...
Владислав Орлов aka JohnSUN
Благодарить-не зазорно.
Подарить благо создателям офиса, нашему ресурсу, мне

rami

Цитата: JohnSUN от 26 мая 2015, 13:35Только, наверное, "3-5"
Это зависит от разбивки диапазонов печати. У меня так получилось, на других компах, осях и принтерах может быть иначе. Каждый заполненый лист в документе считается как страница печати и каждый большой диапазон печати разбивается на несколько страниц. Это нужно учитывать при назначении страниц для распечатки. Если будут вставляться новые листы перед диапазонами печати, то нужно корректировать эти цифры. njuton89 должен "поиграться" с этими цифрами с учётом распечаток.
Цитата: JohnSUN от 26 мая 2015, 13:35Опять же, нам никто не запрещает именно их ("vutyag" и "rozrahunok") сразу сдвинуть в начало книги и указать "1-3"...
Да, если листы не видимые, то всё равно где они не видимые ;D , но лучше в нужном месте 8-)

njuton89

Цитата: JohnSUN от 26 мая 2015, 13:07Пока будет готов макрос, несколько замечаний советов по книге.
У тебя в kategoria битая ссылка. Надеюсь, это только в порезанном примере.
Длиннющую формулу для Кр1 можно сократить, если использовать не IF(), а MAX():
Код:

=MAX(ROUND((((((F14*F18)/(F4*F3*F9*F10))-1)*(F19-F20))/F19)+1;4);1)

И префикс osnovna. в формуле сейчас не нужен, поскольку она находится здесь же, на листе osnovna.
Не стесняйся использовать проверку орфографии - у тебя на Zapovnyty попадаются Місцерозташування и Сернтифікований

Большое спасибо за подсказки по формуле. У меня просто по деревенски получилось)
В kategoria  проверил - там не битая ссылка.


njuton89

#12
Цитата: rami от 26 мая 2015, 13:26Самое главное — будут изменять структуру документа или нет. Вы говорите, что нет. Это сильно упрощает задачу.

Проверьте мой вариант. Если он в принципе подходит, то мы допилим остальное (диапазоны, результат распечатки и т.д.)

Пробовал тестить файл "пример-2". При печати выходит последний лист прикрепленного файла. По совету JohnSUN перетянул два листа которые нужно печатать на начало и изменил в макросе "1-3". Что при скрытых листах что при видимых - печатается только это (файл прикреплен).

Может можна привязать макрос не к областям печати а к названиям листов?
А в целом - то что нужно)

JohnSUN

Это как раз то, что rami имел в виду под "допилим остальное (диапазоны, результат распечатки и т.д.)"
Нужно удалить диапазоны печати для всех листов, задать диапазоны печати для "vutyag" и "rozrahunok", выставить параметры страницы (колонтитулы, ориентация, подогнать на количество листов в ширину и высоту), в предварительном просмотре глянуть что получается (и сколько там страниц)...
Ничего-ничего, скоро заработает, как часы
Владислав Орлов aka JohnSUN
Благодарить-не зазорно.
Подарить благо создателям офиса, нашему ресурсу, мне

rami

Цитата: JohnSUN от 26 мая 2015, 20:27Нужно удалить диапазоны печати для всех листов, задать диапазоны печати для "vutyag" и "rozrahunok", выставить параметры страницы (колонтитулы, ориентация, подогнать на количество листов в ширину и высоту), в предварительном просмотре глянуть что получается (и сколько там страниц)...
Я всё так и сделал. Проверил ещё раз предыдущий документ пример-2.ods — работает как надо. Скорей всего разница в результате происходит из-за разных настроек офиса. Изменил кое-что ещё. Выкладываю изменённый документ и результат в формате .pdf, проверяйте.

Кстати, какой пароль на защищённые листы?