使用Google Script

时间:2017-07-14 07:18:23

标签: javascript google-apps-script google-sheets google-sheets-api

我正在尝试使用谷歌脚本插入存储在我想要插入谷歌工作表的谷歌驱动器上的图像

请记住,我的驱动器中存储了大量图像,我并不想将其发布到网络上,但确实需要一种自动执行方式。

我知道这个问题是在2/3年前被问到的,谷歌没有这样做的方法,有像出口链接这样的解决方法现在已经被删除了。

我想到了

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()
}

1 个答案:

答案 0 :(得分:0)

这个样本怎么样?在此示例中,使用图像文件的文件名将图像插入活动工作表。您可以在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()相对应。除了它们之外的mimeType图像不能直接使用。所以这样的图像必须转换mimeTypes。但由于Google Apps脚本没有准备好的转换器,因此必须在此之前使用外部API。最近,我注意到,通过更改查询参数,可以将thumbnailLink Drive API用于此情况。您可以查看详细信息here

关于示例脚本,我使用了它。此脚本在特定文件夹中插入图像。您可以使用png,bmp,gif和jpeg以及其他mimeTypes的mimeTypes。虽然我认为通过分离“png,bmp,gif和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);
  }
}

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