it-swarm.com.ru

Как создать пользовательские сочетания клавиш для функций скрипта приложения Google?

Я пытаюсь понять жизнеспособность замены некоторых моих электронных таблиц Microsoft Excel на электронные таблицы Google Doc. Как создать настраиваемое сочетание клавиш для функции сценария приложения Google в электронной таблице документов Google? Это то, что я обычно делаю с VBA и Excel.

43
User

Сценарий приложений предоставляет только события на стороне сервера . К сожалению, вы не можете зарегистрировать события на стороне клиента, такие как нажатия клавиш сегодня. Пожалуйста, зарегистрируйте проблему в нашем трекер проблем

19
Arun Nagarajan

Теперь это поддерживается в листах (см. https://issuetracker.google.com/issues/36752620 ), но еще не в Документах. Смотрите и отмечайте https://issuetracker.google.com/issues/36752620 для поддержки Документов

10
studgeek

Совсем недавно (апрель 2018 года) Google запустил рекордер макросов, который включает способ назначения сочетания клавиш для запуска макроса и способ импорта существующих сценариев в качестве макросов. Смотрите Макросы Google Sheets

ПРИМЕЧАНИЕ. Эта функция в настоящее время разворачивается, поэтому она может стать доступной для всех в течение нескольких недель. В моем случае он был доступен сначала в моей личной учетной записи Google, а со вчерашнего дня - в одной из моих учетных записей G Suite.

9
Rubén

Решение было опубликовано в выпуск 306 ! Для ленивых вот оно:

Новый режим IFRAME в HtmlService позволяет передавать коды ключей в дополнения ...

$(document).keydown(function(e){
  //CTRL + V keydown combo
  if(e.ctrlKey && e.keyCode == 86){
    $( '#output' ).html("I've been pressed!");
  }
})

Для этого нужно сначала нажать/активировать боковую панель.

5
John Targaryen

Просто обновляя, теперь возможно обходной путь, который упомянутый Парень через IFRAME, вы можете создать боковую панель, STUB только для ввода клавиатурных команд, обрабатывать их с помощью jquery и запускать соответствующую функцию, уже используя это.

2
Kriggs

Отличная новость :) Вы можете получить пользовательские сочетания клавиш для функций скрипта приложения Google, выполнив следующие простые шаги:

  1. В пользовательском интерфейсе Google Sheets выберите Сервис> Макросы> Запись макроса.
  2. Запишите любое действие. Например, измените цвет фона в A1. Нажмите Сохранить.
  3. Сохраните его со случайным названием и предпочтительным ярлыком. Вы можете изменить его позже.
  4. Выберите Инструменты> Редактор скриптов, чтобы открыть скрипт, связанный с листом в редакторе скриптов приложений.
  5. На новой вкладке редактора выберите View> Show Manifest File
  6. ТА - ДА! : D Измените значение functionName на желаемое;)

Помните, что макро-функции не должны принимать аргументов и не возвращать значений. Дополнительная информация на https://developers.google.com/apps-script/guides/sheets/macros#importing_functions_as_macros

2
urpi5

Одним из возможных способов решения этой проблемы может быть выделение столбца для «текста триггера», определение различных текстовых триггеров для каждого действия, которое вы пытаетесь выполнить, а затем создание функции, которая проверяет значение и выполняет действие на основе « триггерный текст ". Затем вы можете установить триггер события onEdit в триггерах проекта в разделе «Ресурсы» в редакторе сценариев для функции горячих клавиш. 

Самым большим недостатком этого подхода является то, что триггеру onEdit требуется (по крайней мере для меня) примерно 7 полных секунд, чтобы поймать изменение и выполнить обновление. Если вам нужно что-то обрабатывать быстрее, вам, возможно, придется искать альтернативный подход.

Ниже приведен пример того, как изменить цвет строки на основе текста триггера в обозначенном столбце «триггер». Вы можете использовать это, чтобы сделать все, что можно сделать на листе с помощью сценариев, например изменить значения, установить вес шрифта, скопировать данные или даже запустить другие функции после проверки ввода триггерного текста.

/*you will need to add an onEdit trigger to your project 
  for this to run when you edit the cell*/


//function to update row color using entered text in a specified "trigger" column

function hotKey(){ 

  //get the cell you edited and the associated column and row number
  var cell = sheet.getActiveCell(); 
  var thisCol = cell.getColumn(); 
  var thisRow = cell.getRow(); 

  //set a range variable for the entire row
  var colorRow = sheet.getRange(thisRow,thisCol,1,Cols); 

  //get the edited value for the cell as a string
  var val = cell.getValue().toString(); 

  //check that the edited cell is in the trigger column
  if (thisCol = 1){

    //update the row color based on the entered value 
    if(val == "g"){ 
      colorRow.setBackground("#00ff00"); //sets row color to green
      cell.clearContent(); //delete the trigger cell value

    }else if(val == "r"){
      colorRow.setBackground("#ff0000");
      cell.clearContent();
    }else if(val == "fd"){
      colorRow.setBackground("#fff2cc");
      cell.clearContent();
    }else if(val == "pr"){
      colorRow.setBackground("#ffff00");
      cell.clearContent();
    }else if(val == "cn"){
      colorRow.setBackground("#6fa8dc");
      cell.clearContent();
    }
  }
}
1
MistyDawn

Я борюсь с подобной проблемой, и, тем не менее, я еще не очень много решил, я думаю, что путь можно найти через этот обработчик события нажатия клавиши в Text Classbox

Я не знаю, решит ли это проблему серверной стороны только, на что указал Арун, но я уверен, что надеюсь на это. Пожалуйста, не стесняйтесь исправить мои рассуждения, прежде чем я потрачу слишком много времени, пытаясь это сделать! :)

0
The Guy

Короче говоря: напишите html-сервис, который использует обработчик событий нажатия клавиш для захвата событий нажатия клавиш и сравнивает их с нужными горячими клавишами, а затем вызывает соответствующую подпрограмму на стороне сервера в скрипте приложений, чтобы встроить вызываемые нажатия клавиш, формат или изменения документа.

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

0
The Guy