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

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

27 Май 2020, 02:07 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
Новости: Вы можете задать вопрос по LibreOffice или Apache OpenOffice без регистрации, используя форму
 
   Начало   Помощь Поиск Войти Регистрация    задать вопрос  
Страниц: 1   Вниз
  Печать  
Автор Тема: Как создать кнопку с формулой?  (Прочитано 10924 раз)
0 Пользователей и 1 Гость смотрят эту тему.
ofeo
Участник
**
Offline Offline

Сообщений: 5


« Стартовое сообщение: 19 Октябрь 2013, 15:21 »

Как создать кнопку, чтобы при нажатии на нее - очищались определенные ячейки?
Возможно ли вообще сделать такое?
Записан
JohnSUN
Капитана в тот день называли на "ты"
Гуру
*******
Offline Offline

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


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


WWW
« Ответ #1: 20 Октябрь 2013, 19:13 »

Конечно, это возможно...
Но создание такой кнопки - чаще всего, лишний труд. Для очистки выделенных ячеек достаточно нажать Backspace.
Если так уж хочется видеть кнопку на панели инструментов и нажимать её мышкой, можно выбрать Сервис-Настройка, перейти на вкладку Панели инструментов, выбрать из списка панель с названием Форматирование. Можно, конечно, выбрать и любую другую или даже создать новую, но именно на панели Форматирование создатели офиса поместили кнопки для вставки/удаления строк и столбцов. Как раз возле этих кнопок удобнее всего пристроить новую - по смыслу близко.
А дальше просто: нажимаешь Добавить, выбираешь категорию Правка, в командах находишь Удалить содержимое, нажимаешь Добавить и Закрыть. Если вставил не в то место панели, кнопками со стрелочками передвигаешь новую кнопку в нужное место списка и нажимаешь ОК.
Теперь достаточно выделить мышкой нужные ячейки и нажать кнопку на панели инструментов - специальное окошко переспросит какие данные нужно удалить.
Записан

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

Сообщений: 5


« Ответ #2: 20 Октябрь 2013, 19:55 »

А если мне нужно кнопку не на панели инструментов, а именно в таблице, чтобы она была на определенном листе и на этом же листе очищала определенные ячейки... так возможно?
Записан
JohnSUN
Капитана в тот день называли на "ты"
Гуру
*******
Offline Offline

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


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


WWW
« Ответ #3: 20 Октябрь 2013, 21:22 »

Возможно и такое.
Нужно написать макрос, который очищает нужные ячейки. Это не сложно, выглядит приблизительно так:
Код:
Sub clrCells
Dim oActiveSheet As Variant
Dim oCellRangeByName As Variant
  oActiveSheet = ThisComponent.getCurrentController().getActiveSheet() ' Не заморачиваемся с поиском нужного листа -
' на этом листе кнопку нажали, значит на этом дисте и ячейки чистим
  oCellRangeByName = oActiveSheet.getCellRangeByName("D2:E18") ' Ну, адреса ячеек здесь вписаны от фонаря, впишешь нужные
  oCellRangeByName.clearContents(7) ' 7 = 1 (числа) + 2 (даты) + 4 (строки). Можно удалять и форматы, и формулы, и примечания...
End Sub
Этот макрос сохраняешь или в книге, в которой будешь им пользоваться, или прямо в библиотеке своих макросов всего офиса.
Потом через Вид-Панели инструментов-Элементы управления отображаешь панельку, с которой берешь кнопку и рисуешь её в нужном месте нужного листа. Отдельный значок на панельке - Элемент управления - откроет форму настроек, где сможешь задать надпись, цвет, картинку, размер и кучу всего разного для этой кнопки. В том числе и обработку события Выполнить действие: выбираешь для этого события только что сохраненный макрос, сохраняешь книгу, отключаешь режим разработки (кнопка с рукой на панели), закрываешь панель и пользуешься
Записан

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

Сообщений: 5


« Ответ #4: 20 Октябрь 2013, 23:17 »

Оооооо.... то что надо!!! Большое Вам спасибо!
Записан
ofeo
Участник
**
Offline Offline

Сообщений: 5


« Ответ #5: 20 Октябрь 2013, 23:24 »

А еще вопрос...
А если это несколько областей ячеек.. к примеру С1:D4 и G1:H4  - как прописать такое условие адресов ячеек?
Записан
JohnSUN
Капитана в тот день называли на "ты"
Гуру
*******
Offline Offline

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


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


WWW
« Ответ #6: 21 Октябрь 2013, 09:21 »

Лучше всего - перечислить по очереди... Есть и другие способы, но этот самый простой.
Весь код этого макроса может быть записан "в одну строчку через точку":
Код:
Sub clrCells
  ThisComponent.getCurrentController().getActiveSheet().getCellRangeByName("D2:E18").clearContents(7)
End Sub
(Подробно расписывал, чтобы читать было понятнее - а работать будет и так.)
А значит для уточнённой задачи нужно просто повторить эту строчку нужное количество раз и вписать нужные диапазоны ячеек:
Код:
Sub clrCells
  ThisComponent.getCurrentController().getActiveSheet().getCellRangeByName("C1:D4").clearContents(7)
  ThisComponent.getCurrentController().getActiveSheet().getCellRangeByName("G1:H4").clearContents(7)
' ... и так столько раз сколько понадобится  
End Sub
« Последнее редактирование: 21 Октябрь 2013, 09:27 от JohnSUN » Записан

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

Сообщений: 5


« Ответ #7: 21 Октябрь 2013, 10:29 »

Всё получилось. Большое спасибо!
Записан
Duelsel
Участник
**
Offline Offline

Сообщений: 6


« Ответ #8: 21 Январь 2020, 09:44 »

Лучше всего - перечислить по очереди... Есть и другие способы, но этот самый простой.
Весь код этого макроса может быть записан "в одну строчку через точку":
Код:
Sub clrCells
  ThisComponent.getCurrentController().getActiveSheet().getCellRangeByName("D2:E18").clearContents(7)
End Sub
(Подробно расписывал, чтобы читать было понятнее - а работать будет и так.)
А значит для уточнённой задачи нужно просто повторить эту строчку нужное количество раз и вписать нужные диапазоны ячеек:
Код:
Sub clrCells
  ThisComponent.getCurrentController().getActiveSheet().getCellRangeByName("C1:D4").clearContents(7)
  ThisComponent.getCurrentController().getActiveSheet().getCellRangeByName("G1:H4").clearContents(7)
' ... и так столько раз сколько понадобится 
End Sub
а есть ли возможность чтобы при повторном нажатии кнопки был возврат к исходным значениям ячеек? Как бы вернуть назад...
Записан
Bigor
Мастер
*****
Offline Offline

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


« Ответ #9: 21 Январь 2020, 09:52 »

при повторном нажатии кнопки был возврат к исходным значениям ячеек? Как бы вернуть назад...
я вижу такой способ:
Загоняем все в массив через getDataArray
Создаем некий флаг. который инвертируется при нажатии кнопки
Если флаг false чистим диапазон
Если флаг true восстанавливаем диапазон из массива через setDataArray
Записан

Поддержать разработчиков LibreOffice можно можно тут, а наш форум вот тут
economist
Форумчанин
***
Offline Offline

Сообщений: 1 185


« Ответ #10: 21 Январь 2020, 12:50 »

Можно старые значения макросом "хранить" в комментариях к ячейке. Удобно смотреть что там было.

Можно включить общий доступ к файлу и отслеживать изменения - история значений будет сохраняться (без макросов).

Можно использовать Сервис - Сценарии, роль которого как раз замена групп значений на другую и обратно (без макросов и даже с кнопкой). Для полной очистки - нужно создать первый сценарий с еще пустыми ячейками. Число сценариев - не ограничено ничем.
« Последнее редактирование: 25 Январь 2020, 20:30 от economist » Записан

Руб. за сто, что Питоньяк
Любит водку и коньяк!
Потому что мне, без оных, -
Не понять его никак...
Страниц: 1   Вверх
  Печать  
 
Перейти в:  

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