【问题标题】:How display images from Google Drive on Gsheet cell?如何在 Gsheet 单元格上显示来自 Google Drive 的图像?
【发布时间】:2020-02-18 18:42:12
【问题描述】:

我想根据存储在 Gdrive 中的图像的 URL 在 Gsheet 单元格上轻松显示图像。

我已尝试使用 Gsheet 函数 =IMAGE("URL"),但它不起作用。

目标是显示图像图片,如下例所示 (第 5 行的图片示例是手动完成的)

【问题讨论】:

  • 那是裸链接我们的超链接(=hyperlink( , ))吗?
  • @James D URL 链接来自智能手机拍摄的照片,并通过我创建的 Gform 存储在 Gdriver 中

标签: google-apps-script google-sheets google-sheets-formula


【解决方案1】:
  • 您想将 Google 云端硬盘中的图片放到您的 Google 电子表格中。
  • 您希望使用 Google Apps 脚本实现此目的。

如果我的理解是正确的,那么这个答案呢?请认为这只是几个可能的答案之一。

模式一:

在此模式中,图像使用=IMAGE("URL") 放置。

使用=IMAGE("URL") 时,需要公开分享图片。所以请以On - Anyone with the link公开分享图片。

另外,请将端点修改如下。

发件人:

https://drive.google.com/open?id=###

到:

https://drive.google.com/uc?export=download&id=###
  • 在这种情况下,您可以在图片公开分享后将图片添加到=IMAGE("https://drive.google.com/uc?export=download&id=###")

模式 2:

如果您不想公开分享图片,这种模式怎么样?在此模式中,图像以 blob 形式放置,不公开共享。

这里,请检查以下示例脚本。

示例脚本:

var fileId = "###";  // Please set the file ID of the image.

var sheet = SpreadsheetApp.getActiveSheet();
var blobSource = DriveApp.getFileById(fileId).getBlob();
var image = sheet.insertImage(blobSource, 1, 1);
image.setWidth(100).setHeight(100);
sheet.setColumnWidth(1, 100).setRowHeight(1, 100);
  • 当您运行脚本时,图像会被放到单元格“A1”中。并且图像大小被调整为 100 x 100 像素。然后,根据图像大小更改行和列大小。
  • 这是一个简单的示例脚本。所以请根据您的实际情况进行修改。

参考资料:

如果我误解了您的问题并且这不是您想要的方向,我深表歉意。

补充:

从你的回复中发现图片尺寸超过限制尺寸(1,048,576 pixels^2)Ref你现在的原因是这个。

在这种情况下,为了放置图像,需要调整图像大小。以下示例脚本通过调整图像大小来放置图像。为此,我使用了 Google Apps 脚本库。所以please install it to the script editor

示例脚本:

var fileId = "###";  // Please set the file ID of the image.

var sheet = SpreadsheetApp.getActiveSheet();
var blobSource = DriveApp.getFileById(fileId).getBlob();
var obj = ImgApp.getSize(blobSource);
var height = obj.height;
var width = obj.width;
if (height * width > 1048576) {
  var r = ImgApp.doResize(fileId, 512);
  blobSource = r.blob;
}
var image = sheet.insertImage(blobSource, 1, 1);
image.setWidth(100).setHeight(100);
sheet.setColumnWidth(1, 100).setRowHeight(1, 100);
  • 在此示例脚本中,当图像大小超过 1,048,576 pixels^2 时,图像会调整大小并放入电子表格中。
  • 这是一个简单的示例脚本。所以请根据您的实际情况进行修改。

参考资料:

【讨论】:

  • 我遵循了您的建议(模式 2),并在我的项目中添加了您的脚本示例,但在运行以下行的脚本时遇到错误:var image = sheet.insertImage(blobSource, 1, 1); 我尝试了几个来自stackoverflow的解决方案为link1link2,我没有成功
  • 感谢您的反馈我已经测试了第一个模式,只有当文件与您之前提到的公共访问共享时,解决方案才可以。但是,由于公司合规规定,我不能公开分享这张照片。我会检查第二个解决方案并给你我的反馈
  • @Mohamed H 感谢您的回复。我带来的不便表示歉意。关于模式1,我可以理解你的实际情况。关于模式 2,关于 I have met an error during running of script on the following line: var image = sheet.insertImage(blobSource, 1, 1);,不幸的是,我无法从中想象出详细的错误消息。这是因为我的技术不好。我对此深表歉意。你能提供错误信息吗?顺便问一下,这个网址的文件所有者是你吗?
  • 错误消息是法语Erreur liée à un service : Feuilles de calcul (ligne 6, fichier "InsertImageInCell") 关于脚本var image = sheet.insertImage(blobSource, 1, 1); 中的行。是的,我是 Ghseet 的所有者。
  • @Mohamed H 感谢您的回复。不幸的是,我不懂法语。这是因为我的技术不好。我对此深表歉意。可以问一下错误信息的含义吗?在你的脚本中,我可以问你测试的DriveApp.getFileById(fileId).getBlob();fileId 的值吗?因为如果您使用 URL,则会发生错误。但如果我误解了你的情况,我深表歉意。
【解决方案2】:
=image("https://drive.google.com/uc?export=download&id="&right(A2;33);1). 

这对我有用

【讨论】:

猜你喜欢
  • 2013-03-11
  • 2021-07-24
  • 2020-05-07
  • 1970-01-01
  • 1970-01-01
  • 2014-05-05
  • 2014-02-17
  • 1970-01-01
相关资源
最近更新 更多