Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/google-sheets/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Google sheets 谷歌工作表:从共享工作表制作图像链接的本地副本_Google Sheets - Fatal编程技术网

Google sheets 谷歌工作表:从共享工作表制作图像链接的本地副本

Google sheets 谷歌工作表:从共享工作表制作图像链接的本地副本,google-sheets,Google Sheets,我的frient向我分享了他的谷歌工作表,该表包含一个链接(url)的图像。我如何才能复制这张表,并使所有的图像链接是本地的,所以我希望图像是复制到我的本地谷歌驱动器自动(这样的链接不会被打破,如果他删除他的图像文件在未来)。现在,如果我复制了这个文档,那么它仍然链接到原始图像源 怎么可能呢?当然,我不想手动从链接中一个接一个地复制它们。有更好更快的方法吗 OP希望从超链接公式中提取图像URL,并将图像副本保存到他们自己的Google Drive帐户中 这个答案结合了StackOverflow案

我的frient向我分享了他的谷歌工作表,该表包含一个链接(url)的图像。我如何才能复制这张表,并使所有的图像链接是本地的,所以我希望图像是复制到我的本地谷歌驱动器自动(这样的链接不会被打破,如果他删除他的图像文件在未来)。现在,如果我复制了这个文档,那么它仍然链接到原始图像源

怎么可能呢?当然,我不想手动从链接中一个接一个地复制它们。有更好更快的方法吗


OP希望从超链接公式中提取图像URL,并将图像副本保存到他们自己的Google Drive帐户中

这个答案结合了StackOverflow案例中的几个要素

  • 由于图像元数据位于公式中,因此代码使用
    getformals()
    方法,而不是“常规的”
    getValues()
    。没有公式的单元格是空字符串;因此,如果(formula.length!=0){,则测试

  • 获取不带扩展名的文件名:。具有讽刺意味的是,此示例不使用正则表达式,而是查找最后一个/和最后一个的位置。使用lastIndexOf并在这些点之间获取子字符串。请注意,此解决方案在具有多个句点的文件名上失败,尽管此方案还有其他解决方案。

  • 从url获取文件名:它结合了正则表达式和Javascript
    match

  • 将文件保存到Google Drive:这是一个简单而优雅的文件保存解决方案

  • 将文件保存到Google Drive:解释为什么需要API将文件写入我的驱动器

  • 注意:要使用此脚本,请在Advanced Google Services上启用驱动器API v2

    • 在脚本编辑器上,参考资料->高级谷歌服务;打开驱动器API v2


请分享电子表格。请回答一些问题。请更新电子表格以反映表格的大小和位置。这是一次性练习,还是需要定期重复?您是否有使用脚本的经验?
function so5811567402() {
  var ss=SpreadsheetApp.getActiveSpreadsheet();
  var sheetName = "Table";
  var sh = ss.getSheetByName(sheetName);
  var rg=sh.getDataRange();
  var lastColumn = sh.getLastColumn();
  var lastRow = sh.getLastRow();

  var formulas = rg.getFormulas();

  for (var i in formulas) {
    for (var j in formulas[i]) {
      var formula = formulas[i][j];
      if (formula.length !=0){

        var regex = /image\("(.*)"/i;
        var matches = formula.match(regex);
        var imgurl = matches[1];
        var filename = imgurl.substring(imgurl.lastIndexOf("/") + 1, imgurl.lastIndexOf("."));
        //Logger.log(filename);

        var image = UrlFetchApp.fetch(imgurl).getBlob().getAs('image/jpeg').setName(filename);

        var FolderId = "Folder ID goes here";
        var folder = DriveApp.getFolderById(FolderId);
        var file = DriveApp.createFile(image);
        Drive.Files.update({"parents": [{"id": folder.getId()}]}, file.getId());
      }
    }
  }
}