Как создать кнопки + и - в таблице 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 шт):

Автор решения: Prianichkin Sergey

Насколько я понял, Вам нужно получить доступ к изображениям, вставленными поверх ячеек ( именно на такие изображения можно назначить скрипт ). Делается это примерно так ( используется класс 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);
}
→ Ссылка