Как скопировать и вставить изображения «Over the Cells» с помощью скрипта Google Apps? - PullRequest
0 голосов
/ 16 января 2020

Я хочу скопировать и вставить изображения «над ячейкой» на другой лист. Я пытаюсь создать панель инструментов, где пользователи могут выбрать заголовок, который написан в «Alt text» изображений. И изображение появится на приборной панели, которая также будет над ячейкой. Я искал класс OverGridImage , но нет никакой возможности скопировать и вставить поверх изображений ячейки.

Мы, очевидно, можем поместить изображения в ячейки, но это не то, что я ищу , Любая помощь будет оценена. Заранее спасибо.

Следующее изображение является тестом панели инструментов, которую я пытаюсь создать. Изображения над клеткой. Столбец «H» и столбец «I» являются результатом сценария. столбец «G» - это список «альтернативного текста» изображений. и я хочу скопировать и вставить эти изображения, используя скрипт.

enter image description here

1 Ответ

0 голосов
/ 17 января 2020

Я не думаю, что вы пытаетесь сделать в настоящее время возможно.

Класс OverGridImage был выпущен совсем недавно , и нет способа получить Blob для таких изображений. На самом деле существует открытый запрос функций в системе отслеживания проблем. Поскольку интерфейс BlobSource , связанный с этим классом, отсутствует, получить ссылку на это изображение невозможно, если вы загрузили его с устройства. И в настоящее время также нет способа извлечь изображение через Sheets API.

Теоретически, если вы добавите изображение через URL, можно будет получить URL через getUrl () и вставьте его на лист с помощью insertImage (url, column, row) , но getUrl не работает надежно, по крайней мере для некоторых изображений (существует открытый выпуск в Issue Tracker для решения этой проблемы).

Временное решение (в некотором роде):

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

function onEdit(e) {
  var range = e.range;
  var value = range.getValue();
  var editedSheet = range.getSheet();
  if (range.getA1Notation() === "G7" && editedSheet.getName() === "Destination" && value != "") {
    // Remove previous images from "Destination" sheet:
    var currentImages = editedSheet.getImages();
    for (var i = 0; i < currentImages.length; i++) {
      currentImages[i].remove();
    }
    // Get correct url from "Origin" sheet:
    var origin = e.source.getSheetByName("Origin");
    var images = origin.getImages();
    var blob;
    for (var j = 0; j < images.length; j++) {
      if (images[j].getAltTextTitle() === value) { // Check if "Alt text" matches the dropdown value
        url = images[j].getAltTextDescription(); // Get url (first added in description)
        break;
      }
    }
    // Insert new image in "Destination":
    editedSheet.insertImage(url, 1, 1);
  }
}

Надеюсь, это поможет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...