基于Google工作表中的单元格内容的动态超链接?

时间:2016-02-16 21:31:55

标签: google-apps-script google-sheets

谷歌电子表格中有一个项目列表,我们需要链接谷歌硬盘上另一个文件夹中的一堆文件。链接使用如下所示的函数构建:

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 个答案:

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