作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个 Google 表格,每个单元格中都有 Google Drive 文档名称。所以每个单元格都包含一个 Google Drive 文档名称。各种单元一起形成一个阵列。
我正在尝试根据每个 Google 表格单元格中的名称检索这些 Google Drive 文档的超链接,并在每个单元格中设置这些超链接(通过替换每个单元格中的文档名称)。请注意,Google 云端硬盘文档不在相同的 Google 云端硬盘文件夹中。
我设法修改了现有代码,使其在我的上下文中工作;但是,它仅适用于 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);
}
最佳答案
我使用双 map对每个单元格进行迭代的方法,通过这样做,您不需要创建对象 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);
}
关于javascript - 用于检索要在 Google 表格数组中设置的 Google Drive 文档超链接的 Google 脚本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67088278/
我是一名优秀的程序员,十分优秀!