назначить гиперссылку на ячейку в листах Google для файлов на диске Google с помощью скрипта приложения Google - PullRequest
1 голос
/ 20 января 2020

Ниже представлен ГАЗ, который извлекает имена файлов и гиперссылки Google Drive из папки и вставляет их в листы Google.

Теперь я хочу создать гиперссылки Google Drive для выбранного диапазона в листах Google на основе файла. имена (имена файлов точно извлекаются с использованием другого GAS) с сохранением положения ячейки. Может ли кто-нибудь дополнить или указать мне ссылку?

Требование:

  • выбор диапазона ячеек и рекурсивный поиск "совпадающих" имен файлов в папках
  • У меня есть папка и подпапки, поэтому сценарию придется перемещаться / искать многоуровневые папки.
  • Глубина папок составляет около 3-4 уровней

Ниже приведена текущая рабочая ГАЗ

function myFunction() {
  var ss=SpreadsheetApp.getActiveSpreadsheet();
  var s=ss.getActiveSheet();
  var c=s.getActiveCell();
  var fldr=DriveApp.getFolderById("<id>");
  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);
}

Образец электронной таблицы:

enter image description here

Ответы [ 2 ]

1 голос
/ 20 января 2020
  1. На электронной таблице есть имена папок и имена файлов.
    • Эти папки и файлы находятся в указанной папке c.
    • Каждое имя является уникальным именем во всех значениях.
  2. Вы выбираете диапазоны. Например, это «A1: D12» в электронной таблице вашего изображения.
  3. Вы хотите получить все имена файлов и выполнить поиск файлов по именам файлов.
  4. Вы хотите заменить полученные значения к формулам гиперссылок файлов.

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

Модифицированный скрипт:

После того, как вы установили идентификатор папки, пожалуйста, выберите диапазон (например, «A1: D12») и запустите функция myFunction(). При этом имена файлов заменяются формулами гиперссылок.

function myFunction() {
  var folderId = "###"; // Please set the folder ID.

  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var s = ss.getActiveSheet();
  var c = s.getActiveRange()
  var fldr = DriveApp.getFolderById(folderId);
  var values = c.getValues();
  var getFiles = function getFiles(folder) {
    var folders = folder.getFolders();
    while(folders.hasNext()) {
      var fol = folders.next();
//      for (var i = 0; i < values.length; i++) {
//        for (var j = 0; j < values[i].length; j++) {
//          values[i][j] = values[i][j] == fol.getName() ? ('=hyperlink("' + fol.getUrl() + '","' + fol.getName() + '")') : values[i][j];
//        }
//      }
      getFiles(fol);
    }
    var files = folder.getFiles();
    while (files.hasNext()) {
      var f = files.next();
      for (var i = 0; i < values.length; i++) {
        for (var j = 0; j < values[i].length; j++) {
          values[i][j] = values[i][j] == f.getName() ? ('=hyperlink("' + f.getUrl() + '","' + f.getName() + '")') : values[i][j];
        }
      }
    }
  }(fldr);
  if (values.length > 0) {
    s.getRange(c.getRow(), c.getColumn(), values.length, values[0].length).setValues(values);
  }
}

Примечание:

  • Когда используются следующие строки, которые прокомментированы выше, гиперссылки на папки также ставятся.

    for (var i = 0; i < values.length; i++) {
      for (var j = 0; j < values[i].length; j++) {
        values[i][j] = values[i][j] == fol.getName() ? ('=hyperlink("' + fol.getUrl() + '","' + fol.getName() + '")') : values[i][j];
      }
    }
    
  • Если в значениях ячеек и во вложенных папках существуют одинаковые имена файлов и имена папок, то logi c для анализа папок и файлов из значений ячеек не требуется. В вашем дополнительном изображении я не могу понять о логи c. Это из-за моего плохого мастерства. Я прошу прощения за это.

0 голосов
/ 20 января 2020

Повторение для гиперссылок в папках и подпапках

function makeHyperlinks() {
  var ss=SpreadsheetApp.getActive();
  var folder=DriveApp.getFolderById('Your Starting Folder Id');//The main folder to start in  
  var obj={id:ss.getId(),sheetname:'hyperlinks'};//spreadsheet info to pass to recursive function
  getFnF(folder,obj);
}

Эта функция рекурсивно просматривает папки и подпапки, добавляя все гиперссылки в электронную таблицу.

function getFnF(folder,obj) {
  var ss=SpreadsheetApp.openById(obj.id);
  var sh=ss.getSheetByName(obj.sheetname);
  var files=folder.getFiles();
  while(files.hasNext()) {
    var file=files.next();
    sh.appendRow(['=hyperlink("' + file.getUrl() + '","' + file.getName() + '")']);
  }
  var subfolders=folder.getFolders() 
  while(subfolders.hasNext()) {
    var subfolder=subfolders.next();
    getFnF(subfolder,obj);
  }
}

Рекурсия

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...