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

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

20 Август 2018, 18:24 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

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

Сообщений: 11


« Стартовое сообщение: 6 Февраль 2018, 20:47 »

Добрый день!

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

Можно ли сделать это стандартными инструментами? Или может быть есть готовые макросы?

Гуглил - ничего не нашёл. Может искал неправильно. Буду благодарен за помощь.
Записан
Bigor
Старожил
****
Offline Offline

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


« Ответ #1: 6 Февраль 2018, 20:57 »

так?

* test.ods (8.15 Кб - загружено 12 раз.)
Записан
mstx
Новичок
*
Offline Offline

Сообщений: 11


« Ответ #2: 6 Февраль 2018, 21:02 »

так?

Да, именно. Надо чтобы содержание генерировалось автоматически чтобы упростить навигацию по большому количеству листов. Вы, как я понял, просто вручную добавили ссылки?
Записан
JohnSUN
Капитана в тот день называли на "ты"
Гуру
*******
Online Online

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


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


WWW
« Ответ #3: 6 Февраль 2018, 21:07 »

Добро пожаловать на форум!
Кроме уже предложенного Ctrl+K (Вставка-Гиперссылка) есть ещё и функция =HYPERLINK(<куда перейти>;<текст в ячейке>)
Расскажи подробнее - для чего эти прыжки по листам? Вполне возможно, что вместо подробного оглавления книги тебе нужно будет только два листа и выпадающий список (это так, для примера)
Записан

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

Сообщений: 11


« Ответ #4: 6 Февраль 2018, 21:22 »

Добро пожаловать на форум!
Кроме уже предложенного Ctrl+K (Вставка-Гиперссылка) есть ещё и функция =HYPERLINK(<куда перейти>;<текст в ячейке>)
Расскажи подробнее - для чего эти прыжки по листам? Вполне возможно, что вместо подробного оглавления книги тебе нужно будет только два листа и выпадающий список (это так, для примера)

Благодарю за тёплый приём! Улыбка

С выпадающим списком я бы тоже попробовал, только не знаю, как сделать. Пока хочу содержание отдельным листом. В таблице работаю с семантическим ядром. На каждом листе группа из 10-50 фраз с частотой. То есть два столбца: строки и числа.
Записан
Bigor
Старожил
****
Offline Offline

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


« Ответ #5: 6 Февраль 2018, 21:32 »

Код:
sub ins_gypers

oSelection = ThisComponent.getCurrentSelection()
oSpreadsheet = oSelection.getSpreadsheet()


    For i =4 To 16
     oSpreadsheet.getCellByPosition(j, i).setformula("=HYPERLINK(""#Лист" & i & """;""Лист" & i & """)")
   Next i
 

End Sub
вставляет гиперссылки функцию =HYPERLINK  на текущем листе на листы с 4 -го по 16
« Последнее редактирование: 6 Февраль 2018, 21:34 от Bigor » Записан
mstx
Новичок
*
Offline Offline

Сообщений: 11


« Ответ #6: 6 Февраль 2018, 21:43 »

вставляет гиперссылки функцию =HYPERLINK  на текущем листе на листы с 4 -го по 16

При запуске проставляются ссылки, но при клике на ссылку вылезает сообщение "Недопустимый диапазон".
А можно как-то получить количество листов и название листа, зная его номер?
Записан
Bigor
Старожил
****
Offline Offline

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


« Ответ #7: 6 Февраль 2018, 21:53 »

а какой офис? у меня на либре 5.2 работает нормально.
Код:
sub ins_gypers

oSelection = ThisComponent.getCurrentSelection()
oSpreadsheet = oSelection.getSpreadsheet()


msgbox  "Листов: " & ThisComponent.sheets().count & "Лист: " & oSpreadsheet.Name
   For i =4 To 16
   oSpreadsheet.getCellByPosition(j, i).setformula("=HYPERLINK(""#Лист" & i & """;""Лист" & i & """)")
   Next i
End Sub
Цитата:
при клике на ссылку вылезает сообщение "Недопустимый диапазон".
ps а у тебя лист есть на который ссылка указывает?
« Последнее редактирование: 6 Февраль 2018, 21:57 от Bigor » Записан
mstx
Новичок
*
Offline Offline

Сообщений: 11


« Ответ #8: 6 Февраль 2018, 22:13 »

Благодарю всех откликнувшихся и особенно Bigor. Вот, что у меня получилось с вашей помощью:

Код:
sub Contents
oSelection = ThisComponent.getCurrentSelection()
oSpreadsheet = oSelection.getSpreadsheet()

For i = 1 To ThisComponent.sheets().count
oSheet = ThisComponent.Sheets.getByIndex(i-1)

oSpreadsheet.getCellByPosition(0, i).setformula("=HYPERLINK(""#" & oSheet.Name & """;""" &  oSheet.Name & """)")

Next i
End Sub

Макрос создаёт список всех листов со ссылками в текущем листе.
Записан
Bigor
Старожил
****
Offline Offline

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


« Ответ #9: 6 Февраль 2018, 22:21 »

а зачем тебе на лист1 ссылка на лист1 Улыбка
Записан
mstx
Новичок
*
Offline Offline

Сообщений: 11


« Ответ #10: 6 Февраль 2018, 22:24 »

а зачем тебе на лист1 ссылка на лист1 Улыбка

Это уже не так важно)
Записан
mstx
Новичок
*
Offline Offline

Сообщений: 11


« Ответ #11: 6 Февраль 2018, 22:26 »

Этот вариант скрипта делает содержание не в текущем листе, а в листе с названием "Содержание":

Код:
sub Contents
oSelection = ThisComponent.getCurrentSelection()
oSpreadsheet = ThisComponent.Sheets.getByName("Содержание")

For i = 1 To ThisComponent.sheets().count
oSheet = ThisComponent.Sheets.getByIndex(i-1)

oSpreadsheet.getCellByPosition(0, i).setformula("=HYPERLINK(""#" & oSheet.Name & """;""" &  oSheet.Name & """)")
Next i
End Sub
Записан
Bigor
Старожил
****
Offline Offline

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


« Ответ #12: 6 Февраль 2018, 22:26 »

For i = 1 To ThisComponent.sheets().count-1
      oSheet = ThisComponent.Sheets.getByIndex(i-1)
« Последнее редактирование: 6 Февраль 2018, 22:28 от Bigor » Записан
JohnSUN
Капитана в тот день называли на "ты"
Гуру
*******
Online Online

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


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


WWW
« Ответ #13: 6 Февраль 2018, 22:32 »

Ребята, не нужно перебирать все листы - у ThisComponent.getSheets() есть метод .getElementNames(), который возвращает массив имен всех листов. Индексы в массиве соответствуют номерам листов (с нуля, разумеется)
Записан

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

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


« Ответ #14: 6 Февраль 2018, 22:48 »

так?
Код:
sub Contents
oSelection = ThisComponent.getCurrentSelection()
oSpreadsheet = ThisComponent.Sheets.getByName("Содержание")
array1()=ThisComponent.sheets().getElementNames()
For i = LBound(array1(),1) to UBound(array1(),1)
oSpreadsheet.getCellByPosition(0, i).setformula("=HYPERLINK(""#" & array1(i) & """;""" &  array1(i) & """)")
Next i
End Sub
Записан
Страниц: 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!