Calc. Как получить диапазон печати листа и строки разрывов страниц при печати

Автор LuchS, 18 сентября 2024, 12:51

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

LuchS

Добрый  день. Занимаюсь переносом приложения с MS Excel'я на LibreOffice Calc, встал вопрос вот в чем, для  оформления документа в автоматическом режиме, после сокрытия строк в длинной таблице, мне нужно определить в каких видимых строках будет происходить разрывы страниц, т.е. они будут при печати отображаться последними/крайними на листе, с тем что бы в цикле в этом месте вставить промежуточные итоги (форма такая для типового акта). Когда я решал эту задачу в MS Excel, то я привязывался к диапазону печати, который там по сути есть один из именованных диапазонов, а макросом разрывы отслеживал через HPageBreaks. Вопрос как это работает здесь в Star Basic?
Еще вопрос, как в настройках печати указать что бы принтер не печатал фон в ячейках на интересующих меня листе(-ах)?

Спасибо за помощь.

sokol92

Цитата: LuchS от 18 сентября 2024, 12:51Когда я решал эту задачу в MS Excel, то я привязывался к диапазону печати, который там по сути есть один из именованных диапазонов, а макросом разрывы отслеживал через HPageBreaks.
Аналогом свойств и методов объекта PageSetup.PrintArea являются методы интерфейса XPrintAreas.

Список горизонтальных разрывов страниц можно получить с помощью метода getRowPageBreaks.
Установить / убрать принудительный разрыв страницы перед строкой можно с помощью свойства IsStartOfNewPage строки.



Владимир.

LuchS

Цитата: sokol92 от 18 сентября 2024, 13:49
Цитата: LuchS от 18 сентября 2024, 12:51Когда я решал эту задачу в MS Excel, то я привязывался к диапазону печати, который там по сути есть один из именованных диапазонов, а макросом разрывы отслеживал через HPageBreaks.
Аналогом свойств и методов объекта PageSetup.PrintArea являются методы интерфейса XPrintAreas
Список горизонтальных разрывов страниц можно получить с помощью метода getRowPageBreaks.
Установить / убрать принудительный разрыв страницы перед строкой можно с помощью свойства IsStartOfNewPage строки.
а можно пример кода, что-то не соображу, т.к. когда пытаюсь получить в переменную или вывести через msgbox getRowPageBreaks, то код выдает ошибку. В сети примеров в открытом доступе с упоминанием этого метода нет, или нет в кэше гугла/яндекса. Каков должен быть синтаксис запроса?

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

sokol92

Цитата: LuchS от  6 октября 2024, 12:13когда пытаюсь получить в переменную или вывести через msgbox getRowPageBreaks, то код выдает ошибку
Msgbox способен показать не все типы данных. Например, не предусмотрен показ структур и объектов.
Вот так можно вывести информацию о первых горизонтальных разрывах страниц печати первого листа текущего документа:
Sub Test
  Dim s As String, hPB, i As Long
  hPB=ThisComponent.Sheets(0).getRowPageBreaks()
  s="Всего горизонтальных разрывов страниц: " + UBound(hPB)
  For i=0 To 9
    If i>Ubound(hPB) Then Exit For
    s=s & Chr(10) & (i+1) & ". Перед строкой " & (hPB(i).Position+1) & _
      IIf(hPB(i).ManualBreak, " ручной", " автоматический")       
  Next i
  Msgbox s 
End Sub
Цитата: LuchS от  6 октября 2024, 12:13как в настройках печати указать что бы принтер не печатал фон в ячейках
Поясните, пожалуйста (или лучше приложите фрагмент файла), у Вас не белый фон ячеек?
В принципе, макросами (практически) всё возможно сделать.
Владимир.

LuchS

Цитата: sokol92 от  6 октября 2024, 13:15Поясните, пожалуйста (или лучше приложите фрагмент файла), у Вас не белый фон ячеек?
Приложил в аттаче файл. Собственно смысл какой - я серым цветом отмечаю ячейки в которых используются формулы, что бы юзер в них не лез. красным, на листе "КС-6а", подсвечиваю в итогах ошибки округлений по накопительной, если таковые возникают. Это делается при помощи условного форматирования. Зеленый цвет служит для оформления и, на листе КС-2, подсвечивает порядковый номер акта КС-2, который можно изменить вручную, из значений в выпадающем списке. Макросы позволяют автоматизировать шаги по оформлению (например добавлению столбцов на листе КС-6а, сворачиванию строк на листе КС-2, автоматическом копировании из шаблона и заполнению формулами листов КС-2 и КС-3, а так же вывод в формат PDF этого безобразия.

Собственно определение разрывов страниц необходимо что бы после сворачивания строк на листе КС-2 по условию (т.е. тех в которых сумма месячного выполнения равна нулю, а так же не сворачивать заголовки тех работ выполнение по которым все же будет) в конце каждого печатной страницы последней строкой вставлять промежуточные итоги (этого требует оформление по форме акта КС-2, если акт занимает больше одной страницы), а так же в начале каждой такой страницы необходимо вывозить заголовок. Т.к. моими формами пользуются люди, то я для них через цвет помечаю что они могут и должны править, а что нет за счет формулы и/или макроса. Таким образом оформляется первичные бухгалтерские документы в строительстве - КС-ки +, на их основании, счет и счет-фактура. В MS Excel можно в настройках печати выбрать опцию "Печать - Черно-белая" и тогда любые выделения фона и цвет шрифта игнорируется и в этом случае фон ячеек не печатается, а цвет при печати будет выбран черный. Этой опции в LibreOffice Calc я, пока что, не нашел.

Более подробно можно ознакомиться на Хабре по этой ссылке https://habr.com/ru/articles/789530/
Т.к. со следующего года Заказчик перейдет на АльтерОфис, то я заранее переношу свои разработки с MS Office на LibreOffice.

sokol92

Если Вы будете производить печать листа (листов) через вызов макроса, то можно в макросе:
1. Создать копию листа(ов).
2. Внести в копию все необходимые изменения перед печатью.
3. Отпечатать.
4. Удалить копию.
Владимир.

LuchS

Цитата: sokol92 от  6 октября 2024, 13:15Вот так можно вывести информацию о первых горизонтальных разрывах страниц печати первого листа текущего документа:

Спасибо, вот теперь разобрался и все сформировалось. Следующий вопрос: в LibreOffice Calc как-то можно настройки печати выбрать для каждого листа свои? А то у меня 2 листа требуют альбомную ориентацию, 2 других книжную, я уже молчу про разные масштабы...

sokol92

Цитата: LuchS от  7 октября 2024, 20:29в LibreOffice Calc как-то можно настройки печати выбрать для каждого листа свои?
Да, конечно. За это отвечают стили печати.
В Excel каждый лист изначально имеет свои настройки печати.
В Calc лист по умолчанию имеет стиль печати Default, но его можно переназначить. C помощью Sidebar Вы можете редактировать стили, создавать новые и т.д.
Владимир.

LuchS

Цитата: sokol92 от  7 октября 2024, 20:51
Цитата: LuchS от  7 октября 2024, 20:29в LibreOffice Calc как-то можно настройки печати выбрать для каждого листа свои?
Да, конечно. За это отвечают стили печати.
В Excel каждый лист изначально имеет свои настройки печати.
В Calc лист по умолчанию имеет стиль печати Default, но его можно переназначить. C помощью Sidebar Вы можете редактировать стили, создавать новые и т.д.

Эти стили сохраняются в файле или только локально? Т.е. если я настрою стиль печати то на другом ПК юзер откроет с моими настройками или с его настройками Default?

sokol92

Владимир.

LuchS

Подскажите пожалуйста: как можно определить в какой ОС запущен LO в MS Windows или в Linux? т.к. при открытии/сохранении файла макросом пути записываются иначе, или же есть универсальная запись?

sokol92

В LO все пути к файлам указываются в URI формате. Например, путь к файлу OC Windows C:\temp\test,ods в URI записывется так:
file:///C:/temp/test.odsДля преобразования между форматом операционной системы и URI в LO Basic есть функции ConvertToURL и ConvertFromURL.
Владимир.

LuchS

Спасибо. Еще вопрос: как можно получить координаты ячейки в которой стоит курсор?

bigor

Поддержать наш форум можно здесь