使用 Google 脚本插入图像

Inserting Image using Google Script

我正在尝试使用 google 脚本 [=] 插入存储在我的 google 驱动器上的图像,我想将它插入到我的 google sheet 中12=]

请记住,我的驱动器中存储了一大堆图像,我真的不想发布到网络上,但确实想要一种自动化的方式。

我知道大约 2/3 年前有人问过这个问题,google 没有办法,有一些解决方法,例如导出链接,现在已被删除。

我想到了 insertimage(),但它似乎对我不起作用。

这是我用来获取 PDF 和 Tiff 的代码,它基本上是 Tainik 的代码

function insertDrawing(folderID, file_name) {
var ss = SpreadsheetApp.getActiveSpreadsheet();
var file = DriveApp.getFolderById(folderID).searchFiles('title contains "' + file_name + '"').next();
if (!~file.getMimeType().indexOf("pdf") || !~file.getMimeType().indexOf("tiff") || file == 'undefined') {
    ss.toast('No image found');
    return
} 
var res = (JSON.parse(UrlFetchApp.fetch("https://www.googleapis.com/drive/v3/files/" + file.getId() + "?fields=thumbnailLink", {
    method: "GET",
    headers: {
        "Authorization": "Bearer " + ScriptApp.getOAuthToken()
    },
    muteHttpExceptions: true
}).getContentText()).thumbnailLink);
var r = res.split("=");
Logger.log(res)
var url = res.replace(r[r.length - 1], "s5000");
Logger.log([res, url])
return UrlFetchApp.fetch(url, {
    headers: {
        Authorization: "Bearer " + ScriptApp.getOAuthToken()
    }
}).getBlob()
}

这个样本怎么样?在此示例中,使用图像文件的文件名将图像插入活动 sheet。您可以在 https://developers.google.com/apps-script/reference/spreadsheet/sheet#insertImage(Blob,Integer,Integer).

查看 insertImage() 的详细信息

示例脚本 1

SpreadsheetApp.getActiveSheet().insertImage(
  DriveApp.getFilesByName(filename).next().getBlob(),
  1,
  1
);

示例脚本 2

如果要将所有文件插入自己的 Google 驱动器,可以使用以下脚本。但如果图片文件较多,可能会出现错误。

var ss = SpreadsheetApp.getActiveSheet();
var files = DriveApp.getFiles();
var ar = [];
var i = 1;
while (files.hasNext()) {
  var file = files.next();
  if (~file.getMimeType().indexOf("image")) {
    ss.insertImage(DriveApp.getFileById(file.getId()).getBlob(), i++, 1);
  }
}

示例脚本 3

insertImage()可以使用png、bmp、gif、jpeg的mimyTypes。我认为这对应于 getAs(). Images with the mimeType except for them cannot be used directly. So such images have to convert the mimeTypes. But since Google Apps Script doesn't have the prepared converter for it, outer API has to be used for this situation before. Recently, I noticed that thumbnailLink of Drive API can be used for this situation by changing the query parameter. You can see the detail information here.

关于示例脚本,我使用了这个。此脚本将图像插入特定文件夹。您可以使用 png、bmp、gif 和 jpeg 的 mimeTypes 以及其他 mimeTypes。虽然我认为分离"png, bmp, gif and jpeg"和除它们之外的图像效率很高,但是当文件数量很大时,可能会出错。

var folderId = "### folder ID ###";
var ss = SpreadsheetApp.getActiveSheet();
var files = DriveApp.getFolderById(folderId).getFiles();
var ar = [];
var i = 1;
while (files.hasNext()) {
  var file = files.next();
  if (file.getMimeType() == "image/png" || file.getMimeType() == "image/bmp" || file.getMimeType() == "image/gif" || file.getMimeType() == "image/jpeg" || file.getMimeType() == "image/jpg") {
    ss.insertImage(DriveApp.getFileById(file.getId()).getBlob(), i++, 1);
  } else if (~file.getMimeType().indexOf("image")) {
    var res = JSON.parse(UrlFetchApp.fetch("https://www.googleapis.com/drive/v3/files/" + file.getId() + "?fields=thumbnailLink", {
      method: "GET",
      headers: {
        "Authorization": "Bearer " + ScriptApp.getOAuthToken()
      },
      muteHttpExceptions: true
    }).getContentText()).thumbnailLink;
    var r = res.split("=");
    var url = res.replace(r[r.length - 1], "s5000");
    ss.insertImage(UrlFetchApp.fetch(url, {
      headers: {
        Authorization: "Bearer " + ScriptApp.getOAuthToken()
      }
    }).getBlob(), i++, 1);
  }
}

如果我误解了你的问题,我很抱歉。