Изображение в виде примечания к ячейке в Google Таблицах, которое будет отображаться при наведении указателя мыши или наведении курсора. - PullRequest
0 голосов
/ 27 мая 2020

Я хотел бы прикрепить изображения к определенным ячейкам моей электронной таблицы Google, чтобы они отображались при наведении курсора мыши на эту ячейку, подобно тому, как появляются обычные текстовые заметки для обычных ячеек (Shift + F2).

Изначально Google Таблицы поддерживает вставку изображений в ячейку. Однако мои размеры изображений слишком велики, и мне пришлось бы сделать ширину / высоту строки / столбца огромными, чтобы они отображались на 100%. Кроме того, я бы хотел, чтобы изображения появлялись только при наведении курсора мыши и не всегда были видны.

(Я должен добавить, что описываемая мной функциональность на самом деле очень легко достижима в Excel, что позволяет установить фон изображения для комментариев к ячейкам, чего нет в Google Таблицах.)

Я обнаружил надстройку Google Таблиц, которая, кажется, расширяет обычные заметки к ячейкам, чтобы включить более богатый контент, включая изображения. Неудобно, что для этого требуется, чтобы каждое изображение было загружено на сервер изображений, а не с P C. Это было бы хорошо, если бы я не смог добиться поставленной выше цели.

Наконец, я нашел этот предложенный обходной путь, который для меня не работает, в ощущение, что изображение не загружается в качестве предварительного просмотра при наведении указателя мыши на URL-адрес (независимо от того, заканчивается ли он на .jpg или нет), только сам URL-адрес:

enter image description here

Интересно, что эффект, который я получил, действительно существует в Google Docs , когда ссылка даже не изображение, а просто страница:

enter image description here

1 Ответ

1 голос
/ 29 мая 2020

Проблема:

Нет собственного способа инициировать действия при наведении курсора в Таблицах, и нет способа получить изображения, которые были загружены с компьютера и не имеют действительного URL-адреса. Это значительно ограничивает ваши возможности. sh.

Тем не менее, существуют обходные пути, которые могут приблизить вас к требуемой функциональности.

Обходной путь (showModelessDialog):

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

В идеале должен использоваться триггер onSelectionChange, поскольку этот триггер обновляет sh немодальный диалог с текущим изображением, когда пользователь изменяет выбранную ячейку, но поскольку создание немодального диалога требует авторизации, простые триггеры не может запускать службы, требующие авторизации , а onSelectionChange доступен только как простой триггер (не может быть установлен), это будет невозможно.

Таким образом, одним из возможных рабочих процессов может быть следующий :

  • Показывать немодальное диалоговое окно, когда электронная таблица открывается пользователем.
  • Пользователь выбирает ячейку с изображением, которое должно быть показано.
  • Пользователь нажимает кнопка в немодальном диалоге (или предыдущем изображении) для обновления sh немодального диалога с текущим выбранным изображением.

Как это сделать:

Для этого, вы можете выполнить следующие шаги:

  • Установить триггер onOpen, который создает немодальный диалог, когда пользователь открывает электронную таблицу (триггер требует t o быть установленным, поскольку, как я уже упоминал, простые триггеры не могут использовать службы, требующие авторизации). Для этого go в редактор скриптов приложений (выбрав Tools > Script editor), скопируйте эту функцию в свой Code.gs файл и установите триггер, выполнив эти шаги :
function onOpenTrigger(e) {
  var html = HtmlService.createTemplateFromFile("Page").evaluate()
      .setWidth(800) // Change dimensions according to your preferences
      //.setHeight(600) // Change dimensions according to your preferences
  SpreadsheetApp.getUi()
      .showModelessDialog(html, "My image");
}
  • Создайте шаблон HTML, соответствующий немодальному диалогу . Идея здесь такая: когда страница загружается, отображается текущее выбранное изображение. Если нажать кнопку (или само изображение), страница обновится sh с текущим изображением (см. retrieveImage и refreshImage). Создайте файл HTML в редакторе через File > New > HTML file и скопируйте следующий код:
<!DOCTYPE html>
<html>
  <head>
    <base target="_top">
  </head>
  <body onload="retrieveImage()">
    <img id="currentImage" onclick="retrieveImage()" alt="No image is selected" width="600">
    <button onclick="retrieveImage()">Click to refresh image!</button>
  </body>
  <script>
    function retrieveImage() {
      google.script.run.withSuccessHandler(refreshImage).getSelectedImage();
    }

    function refreshImage(imageUrl) {
      if (imageUrl) document.getElementById("currentImage").src = imageUrl;
    }
  </script>
</html>
  • Вернитесь в файл сценария (.gs), создайте функция для получения URL-адреса изображения из текущей ячейки (если в этой ячейке есть изображение). Эта функция будет вызвана немодальным диалоговым окном при загрузке и нажатии кнопки. Это может быть так (для получения этого используется регулярное выражение - см. этот ответ :
function getSelectedImage() {
  var formula = SpreadsheetApp.getActiveRange().getFormula();
  var regex = /=image\("(.*)"/i;
  var matches = formula.match(regex);
  return matches ? matches[1] : null;
}

Примечание:

  • Вы можете адаптировать размеры как выбранного изображения (<img width="" height="">), так и немодального диалога (.setWidth, .setHeight) в соответствии с вашими предпочтениями.

Ссылка:

...