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

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

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

Войти
Новости: Часто задаваемые вопросы по LibreOffice и Apache OpenOffice.org
 
   Начало   Помощь Поиск Войти Регистрация    задать вопрос  
Страниц: 1   Вниз
  Печать  
Автор Тема: Активация режима редактирования ячейки  (Прочитано 2276 раз)
0 Пользователей и 1 Гость смотрят эту тему.
p.cherevin
Участник
**
Offline Offline

Сообщений: 14


« Стартовое сообщение: 17 Май 2019, 12:24 »

Подскажите пожалуйста, как в макросе активировать режим редактирования ячейки?

Вставляю в ячейку строку "Код пров. 01234567".
Нужно чтобы Calc переключился в режим редактирования ячейки и перешёл на 11 символ (0).
Желательно чтобы ещё и режим замены (Insert) включился.

Вроде бы нашёл что-то похожее по названию ".uno:InsertMode", но не знаю где взять описание или пример.

Заранее спасибо.


« Последнее редактирование: 17 Май 2019, 12:38 от p.cherevin » Записан
rami
Гуру
*******
Offline Offline

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


iMac, LibreOffice и Apache OpenOffice


« Ответ #1: 17 Май 2019, 14:02 »

... но не знаю где взять описание или пример.
Нигде, этим способом никто не развлекается.

Опишите задачу полнее, что нужно делать дальше, после того, как "переключился в режим редактирования ячейки и перешёл на 11 символ (0)".
Записан

p.cherevin
Участник
**
Offline Offline

Сообщений: 14


« Ответ #2: 17 Май 2019, 15:38 »

Спасибо за ответ.

Опишите задачу полнее, что нужно делать дальше, после того, как "переключился в режим редактирования ячейки и перешёл на 11 символ (0)".

Сочетанием клавиш вызывается макрос.
Макрос:
1. Вставляет в ячейку нужный мне шаблон строки, например "Код пров. 01234567";
Пример1.png
2. Переводит эту ячейку в режим редактирования (как при двойном клике мышке);
3. Перемещает курсор на 11 символ шаблона и включает режим замены (Insert).
Пример2.png

Теперь можно не тратя время менять "01234567" на нужный номер.
Вызвал макрос и сразу печатаешь.




* Пример2.png (1.59 Кб, 240x77 - просмотрено 12 раз.)

* Пример1.png (1.42 Кб, 230x58 - просмотрено 12 раз.)
« Последнее редактирование: 17 Май 2019, 15:44 от p.cherevin » Записан
rami
Гуру
*******
Offline Offline

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


iMac, LibreOffice и Apache OpenOffice


« Ответ #3: 17 Май 2019, 17:12 »

Теперь можно не тратя время менять "01234567" на нужный номер.
Вызвал макрос и сразу печатаешь.
Вы можете выбрать номер щелчком по нему в "Строке ввода" и сразу заменить на нужный.

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


* Выбрать часть текста.png (39.9 Кб, 392x180 - просмотрено 14 раз.)
Записан

p.cherevin
Участник
**
Offline Offline

Сообщений: 14


« Ответ #4: 18 Май 2019, 22:28 »

Сделал сам.
Вдруг кому понадобится.

Создаём файлик modo.wsf с таким содержимым:
Код:
<package>
   <job id="vbs">
      <script language="VBScript">
      Dim Args      
      Set Args = WScript.Arguments      
        set Objeto = WScript.CreateObject("WScript.Shell")
        Objeto.AppActivate Args(0)
        Objeto.SendKeys "{INSERT}"
        Objeto.SendKeys "{HOME}"
Objeto.SendKeys "^{RIGHT}"
Objeto.SendKeys "^{RIGHT}"
'Objeto.SendKeys "~"
       </script>
   </job>
</package>

В сам макрос вставляем:
Код:
dispatcher.executeDispatch(document, ".uno:SetInputMode", "", 0, Array())
AppString = StarDeskTop.ActiveFrame.Title
   shell("WScript ""D:\modo.wsf""" & " " & AppString,False)

Теперь при запуске макроса Calc :
- переводит эту ячейку в режим редактирования;
- включает режим замены текста;
- перемещает курсор на 2 слова вправо (2 раза Ctrl + Right).

Текст в ячейке готов к редактированию.
Записан
kompilainenn
Мастер
*****
Offline Offline

Сообщений: 3 177



« Ответ #5: 18 Май 2019, 23:26 »

и, после редактирования, режим "забой" остается активным?
Записан

Поддержать разработчиков LibreOffice можно тут, а наш форум вот тут
p.cherevin
Участник
**
Offline Offline

Сообщений: 14


« Ответ #6: 19 Май 2019, 00:05 »

и, после редактирования, режим "забой" остается активным?
Нет, в либре при переходе в другую ячейку почему-то режим замены сбрасывается.
Но если в либре есть событие на редактирование ячейки, можно передавать по нему нажатие Insert.
Смотри следующее сообщение в теме.
« Последнее редактирование: 19 Май 2019, 00:14 от p.cherevin » Записан
p.cherevin
Участник
**
Offline Offline

Сообщений: 14


« Ответ #7: 19 Май 2019, 00:08 »

Вариант с использованием только встроенного Basic'а

Код:
Sub TEST3
REM Simulate a RETURN Key press ( and -release ) in the current Window.
REM NB. This can cause the triggering of window elements.
    Dim oKeyEvent As New com.sun.star.awt.KeyEvent

    oKeyEvent.Modifiers = 0     REM A combination of com.sun.star.awt.KeyModifier.
    oKeyEvent.KeyCode   = com.sun.star.awt.Key.F2              REM 1280.
    oKeyEvent.KeyChar   = chr(0)
    simulate_KeyPress( oKeyEvent )
   
        oKeyEvent.Modifiers = 0     REM A combination of com.sun.star.awt.KeyModifier.
    oKeyEvent.KeyCode   = com.sun.star.awt.Key.INSERT              REM 1280.
    oKeyEvent.KeyChar   = chr(0)
    simulate_KeyPress( oKeyEvent )
   
            oKeyEvent.Modifiers = 0     REM A combination of com.sun.star.awt.KeyModifier.
    oKeyEvent.KeyCode   = com.sun.star.awt.Key.HOME              REM 1280.
    oKeyEvent.KeyChar   = chr(0)
    simulate_KeyPress( oKeyEvent )
   
                oKeyEvent.Modifiers = 2     REM A combination of com.sun.star.awt.KeyModifier.
    oKeyEvent.KeyCode   = com.sun.star.awt.Key.RIGHT              REM 1280.
    oKeyEvent.KeyChar   = chr(0)
    simulate_KeyPress( oKeyEvent )
   
End Sub

Sub simulate_KeyPress( oKeyEvent As com.sun.star.awt.KeyEvent )
REM Simulate a Key press ( and -release ) in the current Window.
REM NB. This can cause the triggering of window elements.
REM For example if there is a button currently selected in your form, and you call this method
REM while passing the KeyEvent for RETURN, then that button will be activated.
    If Not IsNull( oKeyEvent ) Then
        Dim oWindow As Object, oToolkit As Object
        oWindow = ThisComponent.CurrentController.Frame.getContainerWindow()
        oKeyEvent.Source = oWindow     
        oToolkit = oWindow.getToolkit()         REM com.sun.star.awt.Toolkit
        oToolkit.keyPress( oKeyEvent )          REM methods of XToolkitRobot.
     rem   oToolkit.keyRelease( oKeyEvent )
    End If
End Sub

Запускать и подгонять под себя TEST3, simulate_KeyPress не трогать.
Записан
Bigor
Мастер
*****
Offline Offline

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


« Ответ #8: 20 Май 2019, 09:47 »

А не проще форму вызывать и вводить в ней, а потом уже готовое в ячейку копировать
Записан

Поддержать разработчиков LibreOffice можно можно тут, а наш форум вот тут
Страниц: 1   Вверх
  Печать  
 
Перейти в:  

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