以编程方式将Drive映像放入Sheets单元的正确方法是什么?

时间:2014-11-07 12:13:18

标签: google-apps-script google-sheets google-drive-api google-picker

我有一个WebApp,它将工作网站数据收集到Google表格电子表格中,并将工作网站照片收集到我为每个作业创建的Google云端硬盘文件夹中。必须在Google表格的单元格中查看部分(但不是全部)照片,以便可以将作业单打印为作业完成报告的一部分。

我使用Google Picker将文件上传到特定于工作网站作业的文件夹。我不确定从那里使用它们的最佳方式。

我已经成功设置了=IMAGE("hllp://i.imgur.com/yuRheros.png", 4, 387, 422)等单元格公式,但仅限于从网络上其他位置提取的图像。

使用=IMAGE("hllp://drive.google.com/uc?export=view&id=0B8xy-TdDgbjiFoOldUlLT091NXM", 4, 387, 422)这样的{{1}}不起作用;我认为它不会容忍Google在这些链接上执行的网址重定向。

我读过的另一种方法是将实际的blob写入单元格,但尚未尝试过。但是,我怀疑我将失去对后续报告格式的控制。

也许我需要在几个单元格中以多种方式记录图像规范:

  1. 其Google云端硬盘哈希密钥
  2. 其尺寸
  3. 其在imgur.com(或类似)中的替代位置
  4. 它的blob
  5. 是否有一种程序化的方式来获取Google重定向的图像最终网址,相当于打开图片并手动复制网址?一个人可以永远相信它,还是会随着时间的推移而改变呢?

    更新:我错了= IMAGE(“hllp://drive.google.com/uc?export = view& id = 0B8xy-TdDgbjiFoOldUlLT091NXM”,4,387,422)工作。必须将图像共享给“有链接的任何人”,即使电子表格的所有者也是图像的所有者。

    我将继续录制1.hash key和2.dimensions作为我的解决方案,但我很高兴知道是否有其他人有更好的想法。

3 个答案:

答案 0 :(得分:3)

假设您在驱动器中获得了图像的ID,您可以使用如下代码在图纸的最后一行插入图像(该网址与平时略有不同):

  ...
  var img = DriveApp.getFileById('image ID');// or any other way to get the image object
  var imageInsert = sheet.getRange(lastRow+1, 5).setFormula('=image("https://drive.google.com/uc?export=view&id='+img.getId()+'")');// in this example the image is in column E
  sheet.setRowHeight(lastRow+1, 80);// define a row height to determine the size of the image in the cell
  ...

我建议您仔细检查您要显示的文件的共享属性:必须将它们设置为" public" 在文件夹中移动"公开分享"

答案 1 :(得分:3)

我制作了两行脚本,以使用Google云端硬盘中图片的分享链接。

  1. 转到工具>脚本编辑器。
  2. 复制,粘贴以下代码
  3. 保存
  4. function DRIVE_IMAGE(link){ return link.replace("open?", "uc?export=download&"); }

    使用脚本:

    1. 在Google云端硬盘中复制图片的获取可共享链接(也许您需要将共享偏好设置为网络上的公开)。
    2. 转到Google表格单元格。
    3. 输入公式

      =IMAGE(DRIVE_IMAGE("COPIED_LINK"))
      

答案 2 :(得分:0)

我们用图像构建了很多工作表,并使用了Google相册存档{https://get.google.com/albumarchive/ ...}中的静态链接,而不是google照片中的动态链接。归档文件中的链接通常以“ -rw”结尾,从而将查看权限限制为与文档共享的对象。从链接末尾删除“ -rw”似乎有帮助。