谷歌电子表格中有一个项目列表,我们需要链接谷歌硬盘上另一个文件夹中的一堆文件。链接使用如下所示的函数构建:
function bscott () {
var ss=SpreadsheetApp.getActiveSpreadsheet();
var s=ss.getActiveSheet();
var c=s.getActiveCell();
var fldr=DriveApp.getFolderById("**FOLDER ID - not included for security**");
var files=fldr.getFiles();
var names=[],f,str;
while (files.hasNext()) {
f=files.next();
str='=hyperlink("' + f.getUrl() + '","' + f.getName() + '")';
names.push([str]);
}
s.getRange(c.getRow(),c.getColumn(),names.length).setFormulas(names);
}
我们遇到的问题是,如果文件夹的内容与列表的排序完全不符,则文件到订单项的排序会不同步。如果同一行中另一个单元格的内容与文件名中的内容匹配,我们希望某些文件超链接到我们工作表中的某些单元格。我们希望避免为每个订单项手动创建链接。这可能在谷歌表?
答案 0 :(得分:1)
为链接创建文件名对象:
var objNamesToLinks = {};//Create an empty object to be populated with data
使用while
循环填充对象:
var fileName = "";//declare variable outside of the loop.
while (files.hasNext()) {
f=files.next();
fileName = f.getName();
str='=hyperlink("' + f.getUrl() + '","' + fileName + '")';
names.push([str]);
objNamesToLinks[fileName] = str;//The object key is the file name
};
对象的结果将是:
objNamesToLinks = {
'fileName1':'Link1',
'fileName2':'Link2',
'fileName3':'Link3'
};
然后使用文件名获取电子表格中的数据列:
var columnWithFileNames = s.getRange(start Row, column with names, s.getLastRow())
.getValues();
然后循环遍历列中的数据数组并匹配文件名。如果匹配,请查找正确的链接,并将其放入单元格中。
var thisFileName, thisMatchedLink;
for (var i=0;i<columnWithFileNames.length;i+=1) {
thisFileName = columnWithFileNames[i][0].trim();
thisMatchedLink = objNamesToLinks[thisFileName];
if (thisMatchedLink !== undefined) {
s.getRange(i,columnToPutLinkInto).setValue(thisMatchedLink);
};
};