Google sheets 谷歌工作表:从共享工作表制作图像链接的本地副本
我的frient向我分享了他的谷歌工作表,该表包含一个链接(url)的图像。我如何才能复制这张表,并使所有的图像链接是本地的,所以我希望图像是复制到我的本地谷歌驱动器自动(这样的链接不会被打破,如果他删除他的图像文件在未来)。现在,如果我复制了这个文档,那么它仍然链接到原始图像源 怎么可能呢?当然,我不想手动从链接中一个接一个地复制它们。有更好更快的方法吗Google sheets 谷歌工作表:从共享工作表制作图像链接的本地副本,google-sheets,Google Sheets,我的frient向我分享了他的谷歌工作表,该表包含一个链接(url)的图像。我如何才能复制这张表,并使所有的图像链接是本地的,所以我希望图像是复制到我的本地谷歌驱动器自动(这样的链接不会被打破,如果他删除他的图像文件在未来)。现在,如果我复制了这个文档,那么它仍然链接到原始图像源 怎么可能呢?当然,我不想手动从链接中一个接一个地复制它们。有更好更快的方法吗 OP希望从超链接公式中提取图像URL,并将图像副本保存到他们自己的Google Drive帐户中 这个答案结合了StackOverflow案
OP希望从超链接公式中提取图像URL,并将图像副本保存到他们自己的Google Drive帐户中 这个答案结合了StackOverflow案例中的几个要素
- 由于图像元数据位于公式中,因此代码使用
方法,而不是“常规的”getformals()
。没有公式的单元格是空字符串;因此,如果(formula.length!=0){,则测试getValues()
- 获取不带扩展名的文件名:。具有讽刺意味的是,此示例不使用正则表达式,而是查找最后一个/和最后一个的位置。使用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());
}
}
}
}