2016-02-16 2 views
0

Существует список элементов в электронной таблице google, которые нам нужно связать с файлом из другой папки на диске Google. Связь строятся с функцией показано ниже:Динамическая гиперссылка на основе содержимого ячейки в листах 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); 
} 

проблема, которую мы столкнулись, если содержимое папки не совпадает упорядоченность нашего списка точно, упорядочивания файлов ПОЗИЦИИ выходит из синхронизации , Мы хотим, чтобы определенные файлы гиперссылки на определенные ячейки в нашем листе, если содержимое другой ячейки в той же строке соответствует содержимому в имени файла. Мы хотели бы избежать ручного создания ссылок для каждой позиции. Возможно ли это в листах Google?

ответ

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); 
    }; 
}; 
Смежные вопросы