使用Google脚本插入图像
我正在尝试使用Google脚本插入存储在我的Google驱动器上的图像,并希望将其插入到我的Google工作表中
请记住,我的驱动器中存储了一大堆图像,我并不是真的想发布到Web上,但确实想要一种自动执行此操作的方式。
我知道这个问题是在大约2/3年前被问到的,谷歌没有这样做的方法,有一些变通办法,比如出口链接,现在已经被削弱了。
我想到了intertimage(),但它似乎不适用于我。
这是我用来获取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()
}
解决方案
这个样本怎么样?在此示例中,使用图像文件的文件名将图像插入到活动工作表中。您可以在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 Drive中插入所有文件,您可以使用以下脚本。但如果图像文件较多,则可能会出错。
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等miyTypes。我认为这对应于getAs()
。具有MimeType的图像(除它们之外)不能直接使用。因此,这些图像必须转换为MimeTypes。但是由于Google Apps脚本没有为它准备好的转换器,所以以前必须使用外部API来处理这种情况。最近,我注意到,可以通过更改查询参数来使用Drive API的thumbnailLink
。您可以查看详细信息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);
}
}
如果我误解了您的问题,很抱歉。
相关文章