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

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

13 Октябрь 2019, 23:34 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
Новости: Доступно и просто о работе в офисных пакетах
 
   Начало   Помощь Поиск Войти Регистрация    задать вопрос  
Страниц: 1   Вниз
  Печать  
Автор Тема: Существует ли простой способ узнать количество страниц?  (Прочитано 2617 раз)
0 Пользователей и 1 Гость смотрят эту тему.
Rafik
Форумчанин
***
Offline Offline

Сообщений: 95


« Ответ #35177: 6 Апрель 2016, 14:24 »

Не могу найти простой и безотказный способ получения количества страниц.
Пришлось сделать такой макрос:
Код:
Function GetEndAdr(oSheet As object)
' oSheet - Ссылка на лист
oCursor = oSheet.createCursor
oCursor.GotoEndOfUsedArea(false)
nEndRow = oCursor.RangeAddress.EndRow
nEndCol = oCursor.RangeAddress.EndColumn
GetEndAdr = Array(nEndCol,nEndRow) ' Возвращаем адрес последней ячейки документа
end Function

Function Pages1(Optional oDoc As object) As Long
' Считает количество страниц в активном листе.
If isMissing(oDoc) Then
oDoc = ThisComponent
End if
oSheet = oDoc.CurrentController.getActiveSheet()
' Получаем расположение разрывов страницы по колонкам и строкам
oColPgBr = oSheet.getColumnPageBreaks()
oRowPgBr = oSheet.getRowPageBreaks()
' Адрес последней ячейки
oEndAdr = GetEndAdr(oSheet)
'--- Сколько каких разрывов страниц попадает в диапазон (0,0,последн_колонка,последн_строка)
nVert = 0 ' Вертикальные
nHor = 0 ' Горизонтальные
ii = 0
' Позиция первого разрыва. Приводим номер колонки к индексу
nPos1 = oColPgBr(ii).Position - 1
' Сколько вертикальных вписывается ВНУТРЬ диапазона
Do While nPos1 < oEndAdr(0)
nVert = nVert + 1
ii = ii + 1
nPos1 = oColPgBr(ii).Position - 1
Loop
ii = 0
' Позиция первого разрыва. Приводим номер строки к индексу
nPos1 = oRowPgBr(ii).Position - 1
' Сколько горизонтальных вписывается ВНУТРЬ диапазона
Do While nPos1 < oEndAdr(1)
nHor = nHor + 1
ii = ii + 1
nPos1 = oRowPgBr(ii).Position - 1
Loop 
'--- Подсчитали, теперь высчитаем количество страниц
If nVert= 0 And nHor = 0 Then
' Если нет ВНУТРИ разрывов - одна страница
Pages1 = 1
ElseIf nVert > 0 And nHor = 0 Then
' Только вертикальные
Pages1 = nVert + 1
ElseIf nVert = 0 And nHor > 0 Then
' Только горизонтальные
Pages1 = nHor + 1
ElseIf nVert > 0 And nHor > 0 Then
' есть и те и другие
Pages1 = (nHor+1)*(nVert + 1)
End If
End Function
Записан
Страниц: 1   Вверх
  Печать  
 
Перейти в:  

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