Как создать кнопки + и - в таблице google? Проблема доступа к фигурам
Я бы хотел создать в моей таблице приятное дополнение, как кнопки + и - для изменения значение на 1 и -1 соответственно. Как я понял, для этого необходимо использовать фигуры с привязанным к ним скриптом, но дело в том, что я совершенно не могу понять, как получить к ним доступ через GAS, чтобы, например, "переместить" из одной ячейки в другую эти кнопки. Я нашёл решение в Excel, но не могу провернуть подобное в Google Sheets. Дайте мне совет, пожалуйста! Excel-вариант: https://www.planetaexcel.ru/bitrix/components/bitrix/forum.interface/show_file.php?fid=121286&action=download
Ответы (1 шт):
Насколько я понял, Вам нужно получить доступ к изображениям, вставленными поверх ячеек ( именно на такие изображения можно назначить скрипт ). Делается это примерно так ( используется класс OverGridImage ):
function moveImg() {
const
SS = SpreadsheetApp.getActive(),
SHEET = SS.getSheetByName('test'), // Вместо "test" вставьте название своего листа
IMAGES = SHEET.getImages();
// Допустим, нужно получить изображение,
// которому назначен скрипт plusOne и переместить ее в ячейку "D3"
const SCRIPT_NAME = 'plusOne';
IMAGES
.filter(img => img.getScript() == SCRIPT_NAME)[0]
.setAnchorCell(SHEET.getRange('D3'))
// Или получить изображение с якорем (обычно, левый верхний угол изображения)
// в ячейке "B3" и перместить ее в "D3"
IMAGES
.filter(img => img.getAnchorCell().getA1Notation() == 'B3')[0]
.setAnchorCell(SHEET.getRange('D3'))
}
Чтобы работать с рисунками - используйте класс Drawing
function moveDrawing() {
const
SS = SpreadsheetApp.getActive(),
SHEET = SS.getSheetByName('test'), // Вместо "test" вставьте название своего листа
DRAWING = SHEET.getDrawings();
// Допустим, нужно получить рисунок,
// которому назначен скрипт minusOne и переместить ее в ячейку "D3"
const SCRIPT_NAME = 'minusOne';
DRAWING
.filter(draw => draw.getOnAction() == SCRIPT_NAME)[0]
.setPosition(3, 4, 0, 0);
// Или получить рисунок с якорем (обычно, левый верхний угол изображения)
// в ячейке "B3" и переместить ее в "D3"
DRAWING
.filter(draw =>
draw.getContainerInfo().getAnchorRow() == 3 &&
draw.getContainerInfo().getAnchorColumn() == 2
)[0]
.setPosition(3, 4, 0, 0);
}