2016-02-16 47 views
0

在Google电子表格中有一个项目列表,我们需要链接来自谷歌驱动器上另一个文件夹的一堆文件。链接构造有如下功能:动态超链接基于谷歌表格中的单元格内容?

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); 
} 

我们遇到的问题是,如果该文件夹的内容,不正是我们的列表的顺序相匹配,文件到订单项的顺序变得不同步。如果同一行中另一个单元格的内容与文件名中的内容匹配,我们希望某些文件超链接到我们工作表中的某些单元格。我们希望避免为每个订单项手动创建链接。这可能在谷歌床单?

回答

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); 
    }; 
}; 
相关问题