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

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

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

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

Сообщений: 33


« Стартовое сообщение: 27 Май 2016, 21:52 »

Задача: на первой странице я разместил кнопки и т.п.
На второй буду рисовать из макроса. Периодически я эту страницу должен очищать.
Сейчас иду по пути удаляем, затем добавляем страницу.
Есть такой код:
Sub  delPageByName ' удаление страницы
Dim oDrawPages As Variant

sPName = "Page 2"
   oDrawPages = ThisComponent.getDrawPages()
   If oDrawPages.hasByName(sPName) Then oDrawPages.remove(oDrawPages.getByName(sPName))

End Sub
Но вот не задача: если я переименую имя страницы "Page 2", то код работает.
А создаётся страница с именем "Страница 2" (офис её так создаёт) её я не могу удалить, не видит макрос этого имени.
Если ставлю такую строчку oDrawPages.remove(oDrawPages.getByIndex(1))
то сначала страницу удаляет но потом на несовместимость типов ругается.

Или этот код привести в чувство или какой либо метод просто очистки (типа ClearPage), без удаления
Или как страницу переименовать что ли, не могу понять как к её имени подобраться из макроса?
« Последнее редактирование: 5 Июнь 2016, 22:16 от spyAndrey » Записан
spyAndrey
Участник
**
Offline Offline

Сообщений: 33


« Ответ #1: 27 Май 2016, 22:06 »

странно  В замешательстве но вот такой код, после ковыряний не ругается ни на что, и удаляет
sub delpage ' удаление страницы
Dim oDrawPages As Variant
   oDrawPages = ThisComponent.getDrawPages()
   oDrawPages.remove(oDrawPages.getByIndex(1))
end sub
« Последнее редактирование: 27 Май 2016, 22:27 от spyAndrey » Записан
rami
Гуру
*******
Offline Offline

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


iMac, LibreOffice и Apache OpenOffice


« Ответ #2: 27 Май 2016, 23:16 »

Но вот не задача: если я переименую имя страницы "Page 2", то код работает.
А создаётся страница с именем "Страница 2" (офис её так создаёт) её я не могу удалить, не видит макрос этого имени.
Настоящее имя страницы Page N, где N — число, а то что вы видите в боковом меню — это всего лишь перевод.
Записан

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

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


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


WWW
« Ответ #3: 28 Май 2016, 07:21 »

Код:
Sub ClearPage(Optional numPage As Long)
Dim oDrawPages As Variant
Dim oDrawPage As Variant
Dim nCount As Long
Dim oShape As Variant
Dim i As Long
Dim j As Long
If IsMissing(numPage) Then numPage = 1
oDrawPages = ThisComponent.getDrawPages()
For i = oDrawPages.getCount()-1 To 0 Step -1
If Not IsMissing(numPage) And (numPage<>i) Then
oDrawPage = oDrawPages.getByIndex(i)
For j = oDrawPage.getCount()-1 To 0 Step -1
oShape = oDrawPage.getByIndex(j)
oDrawPage.remove(oShape)
Next j
EndIf
Next i
End Sub

Sub tstClearPage()
ClearPage(1)   ' Не стирать страницу Page 2
ClearPage()    ' Стереть всё
End Sub
Если человеческим языком, то:
Получить все страницы текущего документа
В цикле перебрать их все
Если процедура запущена с параметром и номер обрабатываемой страницы не равен этому параметру, в цикле перебрать все элементы на текущей странице и дать команду этой самой текущей странице "Удали элемент с таким-то номером"

Вторая, короткая процедура - просто демонстрация двух способов вызова - с параметром и без него
« Последнее редактирование: 28 Май 2016, 08:38 от JohnSUN » Записан

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

Сообщений: 33


« Ответ #4: 30 Май 2016, 20:32 »

Спасибо, но вот какой код зделал и работает:
sub delpage ' удаление страницы

Dim oDrawPages As Variant
   oDrawPages = ThisComponent.getDrawPages()
    oDrawPages.remove(oDrawPages.getByIndex(1))

end sub

sub addpage ' добавление страницы

Dim oDrawPages As Variant
   oDrawPages = ThisComponent.getDrawPages()
oDrawPages.insertNewByIndex(1)

end sub
поскольку на первой странице у меня формы, добавлять удалять приходится только вторую
Записан
spyAndrey
Участник
**
Offline Offline

Сообщений: 33


« Ответ #5: 30 Май 2016, 22:20 »

Можно поставить статус темы РЕШЕНО
Записан
Страниц: 1   Вверх
  Печать  
 
Перейти в:  

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