Вставьте изображение в Google Sheet с помощью скрипта Apps, используя данные в кодировке base64 - PullRequest
1 голос
/ 03 марта 2020

Учитывая некоторые данные в кодировке base64 для файла png, как в примере ниже из тега изображения.

<img src="data:image/png;base64,R0lGODlhDAAMAKIFAF5LAP/zxAAAANyuAP/gaP///wAAAAAAACH5BAEAAAUALAAAAAAMAAwAAAMlWLPcGjDKFYi9lxKBOaGcF35DhWHamZUW0K4mAbiwWtuf0uxFAgA7">

Мне нужно создать большой двоичный объект изображения из данных в кодировке base64 для метода insertImage() .

sheetClass.insertImage(imageBlob, column, row)

Документация: Класс листов - метод insertImage

Я пытался использовать приведенный ниже код, но он выдает ошибку:

Ошибка выполнения: ошибка при получении изображения с URL-адреса или неверного URL-адреса

В документации указано, что для этого метода требуется BLOB-объект, а не URL-адрес, но похоже, что он ожидает ссылку на файл изображения.

function insertImageFromBase64Src() {
  var data = 'R0lGODlhDAAMAKIFAF5LAP/zxAAAANyuAP/gaP///wAAAAAAACH5BAEAAAUALAAAAAAMAAwAAAMlWLPcGjDKFYi9lxKBOaGcF35DhWHamZUW0K4mAbiwWtuf0uxFAgA7';

  var imageBlob = Utilities.newBlob(Utilities.base64Decode(data), 'image/png').getBytes();

  var ss = SpreadsheetApp.getActiveSpreadsheet();//This code is bound to a Sheet

  var po = {
    shName:'Update File',
    column:1,
    row:37
  }

  var sh = ss.getSheetByName(po.shName);

  var image = sh.insertImage(imageBlob, po.column, po.row);//Insert an image and return the image
}

1 Ответ

1 голос
/ 03 марта 2020

Как насчет этой модификации?

Точки модификации:

  • insertImage может использовать BLOB-объект и URL-адрес, являющийся прямой ссылкой файла изображения.

    • В вашем скрипте imageBlob - это байтовый массив, который равен "number []". Таким образом, я думаю, что происходит ошибка.
  • Пожалуйста, добавьте имя в BLOB-объект.

    • Если имя не указано, возникает ошибка.

Модифицированный скрипт:

Когда ваш скрипт модифицируется, он выглядит следующим образом.

function insertImageFromBase64Src2() {
  var data = 'R0lGODlhDAAMAKIFAF5LAP/zxAAAANyuAP/gaP///wAAAAAAACH5BAEAAAUALAAAAAAMAAwAAAMlWLPcGjDKFYi9lxKBOaGcF35DhWHamZUW0K4mAbiwWtuf0uxFAgA7';

  var imageBlob = Utilities.newBlob(Utilities.base64Decode(data), 'image/png', 'sample');  // Modified

  var ss = SpreadsheetApp.getActiveSpreadsheet();  //This code is bound to a Sheet

  var po = {
    shName:'Update File',
    column:1,
    row:37
  }

  var sh = ss.getSheetByName(po.shName);

  var image = sh.insertImage(imageBlob, po.column, po.row);//Insert an image and return the image
}
  • В этой модификации предполагается, что data может быть правильно декодировано.

Ссылки:

Если это не было прямым решением вашей проблемы, прошу прощения.

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