Активация режима редактирования ячейки

Автор p.cherevin, 17 мая 2019, 12:24

0 Пользователи и 2 гостей просматривают эту тему.

p.cherevin

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

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

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

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



rami

Цитата: p.cherevin от 17 мая 2019, 12:24... но не знаю где взять описание или пример.
Нигде, этим способом никто не развлекается.

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

p.cherevin

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

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

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

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



rami

Цитата: p.cherevin от 17 мая 2019, 15:38Теперь можно не тратя время менять "01234567" на нужный номер.
Вызвал макрос и сразу печатаешь.
Вы можете выбрать номер щелчком по нему в "Строке ввода" и сразу заменить на нужный.

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

p.cherevin

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

Создаём файлик 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

и, после редактирования, режим "забой" остается активным?
Поддержать разработчиков LibreOffice можно тут, а наш форум вот тут

p.cherevin

#6
Цитата: kompilainenn от 18 мая 2019, 23:26и, после редактирования, режим "забой" остается активным?
Нет, в либре при переходе в другую ячейку почему-то режим замены сбрасывается.
Но если в либре есть событие на редактирование ячейки, можно передавать по нему нажатие Insert.
Смотри следующее сообщение в теме.

p.cherevin

Вариант с использованием только встроенного 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

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