javascript - 用于检索要在 Google Sheet 数组中设置的 Google Drive 文档超链接的 Google 脚本
问题描述
我有一个 Google 表格,每个单元格中都有 Google Drive 文档名称。因此,每个单元格都包含一个 Google Drive 文档名称。各种单元一起形成一个阵列。
我正在尝试根据每个 Google 表格单元格中的名称检索这些 Google Drive 文档的超链接,并在每个单元格中设置这些超链接(通过替换每个单元格中的文档名称)。需要注意的是,Google Drive 文档不在同一个 Google Drive 文件夹中。
我设法修改了现有代码,使其在我的上下文中工作;但是,它仅适用于 1 列数组。当我尝试将范围扩展到几列时,所有超链接都返回“未定义”url(即使对于以前工作的第一列)。
请参阅下面我的代码。任何帮助将非常感激。非常感谢。
function getFile() {
const ss = SpreadsheetApp.getActiveSpreadsheet();
const sheet1 = ss.getSheetByName('Sheet1');
var lastRow = sheet1.getLastRow();
var range = sheet1.getRange(2,1,lastRow - 1,4);
var names = range.getValues();
var nameUrl ={};
for (let i in names) {
var files = DriveApp.getFilesByName(names[i]);
while (files.hasNext()) {
var file = files.next();
var fullName = file.getName();
var url = file.getUrl();
nameUrl[fullName] = url;
}
}
var links = names.map(function(e) {
return [
'=HYPERLINK("' + nameUrl[e] + '","' + e + '")'
];
});
range.setValues(links);
}
解决方案
解释:
- 您非常接近,但您的代码适用于一列的二维数组,您需要重新设计代码以处理具有多列的二维数组。
我使用双映射方法来迭代每个单元格,这样做您不需要创建nameUrl
也会减慢代码的对象。
解决方案:
function getFile() {
const ss = SpreadsheetApp.getActiveSpreadsheet();
const sheet1 = ss.getSheetByName('Sheet1');
const lastRow = sheet1.getLastRow();
const range = sheet1.getRange(2,1,lastRow - 1,4);
const names = range.getValues();
const data = names.map(r=>r.map(c=>{
let files = DriveApp.getFilesByName(c);
while (files.hasNext()) {
var file = files.next();
var url = file.getUrl();
return c!=''?'=HYPERLINK("' + url + '","' + c + '")':'';
}}));
range.setValues(data);
}
推荐阅读
- user-defined-functions - GeoSpark 使用 Maven UDF 在 Azure 上运行 Databricks?
- c - 如何检查输入是否为负?
- javascript - 时间输入的正则表达式
- unity3d - unity physic.OverlapSphere 作为触发器
- excel - 不同命名表中的间接索引和匹配问题公式
- django - graphene-django 为 DjangoFilterConnectionField 添加附加参数并将其传递给 get_queryset
- c# - 如何使用 linq lamba 表达式通过内部连接进行分组
- javascript - 在反应中存储来自多个选择的值
- haskell - 有没有办法在模式匹配期间绑定存在数据类型的抑制类型变量?
- python - Pandas:具有另一列唯一值索引的新列