Выбранные диапазоны таблицы мониторинга скрипта приложения Google
Я хочу написать скрипт приложения, который может получить выбранные ячейки
и показать его на входной HTML-текст.
пример:
когда я выбрал ячейку A1, то во входном тексте будет отображаться A1
также, если я выбрал диапазон от A1 до B11, то он покажет A1:B11
я знаю getActiveRange().getA1Notation()
может получить клетку.
Но как отслеживать событие перетаскивания?
2 ответа
Я сделал это как возможное решение. Сценарий приложения выглядит следующим образом. Это работает довольно хорошо. Не уверен, что это то, что вы ищете.
function onOpen() {
SpreadsheetApp.getUi() // Or DocumentApp or FormApp.
.createMenu('Custom Menu')
.addItem('Show sidebar', 'showSidebar')
.addToUi();
}
function showSidebar() {
var html = HtmlService.createHtmlOutputFromFile('Page')
.setTitle('My custom sidebar')
.setWidth(300);
SpreadsheetApp.getUi() // Or DocumentApp or FormApp.
.showSidebar(html);
}
function getActiveRange(){
var ss = SpreadsheetApp.getActiveSpreadsheet();
var sheet = ss.getSheetByName('Sheet1');
var range = sheet.getActiveRange().getA1Notation();
Logger.log(range)
return range
}
Боковая панель имеет функцию, которая вызывает каждую 200-ю секунды. Делая это похоже на получение данных о перетаскивании мышью.
<!DOCTYPE html>
<html>
<head>
<base target="_top">
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.2.1/jquery.min.js">
</script>
<title></title>
</head>
<body>
<input id="data">
<script>
$(document).ready(() => {
setInterval(()=>{
google.script.run.withSuccessHandler(log).getActiveRange();
},200)
})
log(e) => {
$('#data').val(e)
}
</script>
</body>
</html>
Новое событие, добавленное в апреле 2020 года:
Ссылка: https://developers.google.com/apps-script/guides/triggers#onselectionchangee
/**
* The event handler triggered when the selection changes in the spreadsheet.
* @param {Event} e The onSelectionChange event.
*/
function onSelectionChange(e) {
// Set background to red if a single empty cell is selected.
var range = e.range;
if(range.getNumRows() === 1
&& range.getNumColumns() === 1
&& range.getCell(1, 1).getValue() === "") {
range.setBackground("red");
}
}