【问题标题】:How can I transform a link to a file name?如何将链接转换为文件名?
【发布时间】:2017-03-01 09:00:07
【问题描述】:

我有一个包含近 2000 行 URL 的 Google 电子表格文件,例如:

https://docs.google.com/uc?id=0B4ptELk-D3USblk1aWd1OWowRWs

每个网址都包含一张图片,存储在 Google 云端硬盘中。我的问题是:如何将此链接(https://docs.google.com/uc?id=0B4ptELk-D3USblk1aWd1OWowRWs)转换为文件名?例如,我想知道它是否可以是/something/folder/Photofile1.jpg

有没有办法做到这一点?

【问题讨论】:

  • 尝试使用脚本:Drive App, related Q on SO
  • 这个excel对应一个表格。每行都有一个唯一项目的 URL(图片)。列出所有文件是不够的,因为我无法将每一行映射到其对应的 URL(从而丢失每一行的有用信息)。
  • 请授予对任何文件的访问权限,以便我可以测试脚本。我的文件有如下链接:https://drive.google.com/file/d/ key ...,所以我不确定该代码是否适用于链接:https://docs.google.com/uc?id=...
  • 共享图像的链接:drive.google.com/uc?id=0B4ptELk-D3USVi1NZ3ZGbkhqYXc - 您也可以在docs.google.com/spreadsheets/d/…查看示例文档

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


【解决方案1】:

尝试脚本:

function TESTgetFileName() {
  Logger.log(getFileName('0B4ptELk-D3USVi1NZ3ZGbkhqYXc'));
  //                      ^^^^^^^^^^ file ID ^^^^^^^^^
}


function getFileName(id) {
  var file = DriveApp.getFileById(id);
  var fileName = file.getName();    
  var strFolders = getFolders(file); 
  return strFolders + '/' + fileName;  
}

function getFolders(object) {

  var folders = object.getParents();
  if (!folders.hasNext()) { return 'My Drive'; } 
  var folder = folders.next();

  var folderNames = [];

  while (folder.getParents().hasNext()) {        
    var folderName = folder.getName();
    folderNames.unshift(folderName);
    folder = folder.getParents().next();
  }

  return folderNames.join('/');

}

脚本函数将返回结果:

0B4ptELk-D3USVi1NZ3ZGbkhqYXc → My Drive/something/folder/Photofile1.jpg

测试

我打开脚本编辑器,选择函数TESTgetFileName并得到结果

My Drive/Detalhes_Farmacia.Fotografia_Fachada_1.JPEG

此函数可以从脚本运行,而不是直接从电子表格运行。当您尝试将其用作工作表中的自定义公式时,它会引发错误:

您无权调用 getFileById(第 8 行)。

所以最好从脚本中使用它来获取数据,然后将结果写入工作表。

【讨论】:

  • 我运行了脚本。当我尝试 TESTgetFileName 和 getFileName 时出现以下错误:“您无权调用 getFileById(第 8 行)。”对于 getFolders,我得到以下信息:'TypeError:在对象 0B4ptELk-D3USVi1NZ3ZGbkhqYXc 中找不到函数 getParents。 (第 16 行)。'
  • 我已经测试了这个功能。请参阅答案中的测试
  • 确实,它可以在脚本编辑器中运行。反正有没有让它在工作表上工作?我有将近 2000 行的链接,很难一一运行。如果有办法在工作表上运行,我可以在 A 列 URL 旁边的 B 列中显示结果。
  • 不,但是你可以用脚本来处理它:将所有 2000 行数据放入脚本数组,然后只运行数组元素,获取文件名,然后将结果写入工作表。
  • 它有效。谢谢您的支持。但是,就效率而言,它需要“永远”。每行平均可以有 4 张图片,乘以 2000 行,将其全部传递给脚本编辑器然后复制每列结果并复制到工作表中将是一场噩梦。必须有一种更简单的方法来使用工作表上的函数,该函数可以“调用”您的脚本并在工作表上的给定单元格处返回结果。这有什么限制吗?
猜你喜欢
  • 2010-09-07
  • 1970-01-01
  • 2018-03-30
  • 2020-08-26
  • 2014-10-13
  • 1970-01-01
  • 2015-03-08
  • 2019-12-13
  • 1970-01-01
相关资源
最近更新 更多