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

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

27 Сентябрь 2021, 10:04 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

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

Пол: Мужской
Сообщений: 15



« Стартовое сообщение: 25 Май 2015, 21:59 »

Доброго времени суток, гуру свободного офиса.
Вопрос вот в чем, есть лист на котором производится ввод данных для произведения расчетов.
На скрытом листе есть таблица в которую заносится все что посчитано. Нужно чтобы при нажатии на кнопку производилась печать именно этого скрытого листа.
Печать листа реализована таким кодом
Код:
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

Проблема в том, что когда лист который должен быть напечатан - скрыт, то на печать идет первый не скрытый лист.
Как организовать так чтобы печатался именно тот скрытый лист? Помогите пожалуйста.
« Последнее редактирование: 2 Июнь 2015, 13:36 от njuton89 » Записан
Yakov
Администратор
**
Offline Offline

Сообщений: 2 583


WWW
« Ответ #1: 25 Май 2015, 22:17 »

Снять скрытие - распечатать - скрыть?
Записан
njuton89
Участник
**
Offline Offline

Пол: Мужской
Сообщений: 15



« Ответ #2: 25 Май 2015, 22:47 »

Снять скрытие - распечатать - скрыть?
Да. Можно это как то реализовать?
« Последнее редактирование: 25 Май 2015, 22:52 от njuton89 » Записан
njuton89
Участник
**
Offline Offline

Пол: Мужской
Сообщений: 15



« Ответ #3: 26 Май 2015, 10:15 »

Вот что мне выдал макрорекордер
Код:
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
Гуру
*******
Offline Offline

Пол: Мужской
Сообщений: 3 113


iMac, LibreOffice и Apache OpenOffice


« Ответ #4: 26 Май 2015, 13:10 »

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

Макрорекордер отдыхает Крутой
Записан

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

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


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


WWW
« Ответ #5: 26 Май 2015, 14:10 »

Если скрытый лист с диапазоном печати всегда будет самый первый, то всё должно быть просто.
Можешь начинать отлаживать макрос - первый или не первый, а имя у скрытого листа будет "rozrahunok"
Цитата:
oSheet=oSheets.getByName("rozrahunok")
Я бы вообще проверил наличие скрытых листов в книге. Если нет - печатай что хочешь обычными средствами. Если есть - инвертировать IsVisible=not IsVisible у всех листов, отработать "печать всего" и опять инвертировать...
Записан

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

Пол: Мужской
Сообщений: 15



« Ответ #6: 26 Май 2015, 14:15 »

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

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

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

* пример.ods (122.95 Кб - загружено 12 раз.)
« Последнее редактирование: 26 Май 2015, 14:26 от njuton89 » Записан
JohnSUN
Капитана в тот день называли на "ты"
Гуру
*******
Offline Offline

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


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


WWW
« Ответ #7: 26 Май 2015, 15:07 »

Пока будет готов макрос, несколько замечаний советов по книге.
У тебя в 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
Гуру
*******
Offline Offline

Пол: Мужской
Сообщений: 3 113


iMac, LibreOffice и Apache OpenOffice


« Ответ #8: 26 Май 2015, 15:26 »

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

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

* пример-2.ods (96.41 Кб - загружено 20 раз.)
« Последнее редактирование: 26 Май 2015, 15:29 от rami » Записан

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

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


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


WWW
« Ответ #9: 26 Май 2015, 15:35 »

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

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

Пол: Мужской
Сообщений: 3 113


iMac, LibreOffice и Apache OpenOffice


« Ответ #10: 26 Май 2015, 15:59 »

Только, наверное, "3-5"
Это зависит от разбивки диапазонов печати. У меня так получилось, на других компах, осях и принтерах может быть иначе. Каждый заполненый лист в документе считается как страница печати и каждый большой диапазон печати разбивается на несколько страниц. Это нужно учитывать при назначении страниц для распечатки. Если будут вставляться новые листы перед диапазонами печати, то нужно корректировать эти цифры. njuton89 должен "поиграться" с этими цифрами с учётом распечаток.
Опять же, нам никто не запрещает именно их ("vutyag" и "rozrahunok") сразу сдвинуть в начало книги и указать "1-3"...
Да, если листы не видимые, то всё равно где они не видимые Смеющийся , но лучше в нужном месте Крутой
Записан

njuton89
Участник
**
Offline Offline

Пол: Мужской
Сообщений: 15



« Ответ #11: 26 Май 2015, 22:19 »

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

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

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

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

Записан
njuton89
Участник
**
Offline Offline

Пол: Мужской
Сообщений: 15



« Ответ #12: 26 Май 2015, 22:21 »

Самое главное — будут изменять структуру документа или нет. Вы говорите, что нет. Это сильно упрощает задачу.

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

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

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

* пример-2.pdf (146.8 Кб - загружено 11 раз.)
« Последнее редактирование: 26 Май 2015, 22:35 от njuton89 » Записан
JohnSUN
Капитана в тот день называли на "ты"
Гуру
*******
Offline Offline

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


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


WWW
« Ответ #13: 26 Май 2015, 22:27 »

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

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

Пол: Мужской
Сообщений: 3 113


iMac, LibreOffice и Apache OpenOffice


« Ответ #14: 27 Май 2015, 09:23 »

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

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

* пример-3.ods (96.64 Кб - загружено 37 раз.)
* пример-3.pdf (169.78 Кб - загружено 16 раз.)
Записан

Страниц: 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!