Поиск файлов на Google Диске и динамическая гиперссылка на лист Google с помощью скрипта приложения Google - PullRequest
0 голосов
/ 27 октября 2018

Я некоторое время пытался найти решение, но теперь пришло время обратиться за помощью:)

Цель : добавить гиперссылки на определенные документы PDF, хранящиеся в G Drive, на все отдельные ячейки в столбце на странице Google в зависимости от названия документа.

Я лучше объясню. Вот вам скриншот:

Схема листа

Я пытаюсь заменить содержимое ячеек в столбце А гиперссылкой (с сохранением метки ссылки в том виде, в каком она есть) . Гиперссылка должна указывать на документ на диске Google, где имя файла содержит имя, отображаемое в соответствующей ячейке этой таблицы.

Функция должна искать (для каждого значения столбца A) для файла в папке G Drive (где находятся все документы) с именем, содержащим значение ячейка (в ячейке указан только номер счета-фактуры, как на снимке экрана, в то время как в файле также есть «Счет-фактура» перед номером и заканчивается «.pdf») . Если есть совпадение, каждое значение ячейки должно быть заменено гиперссылкой, указывающей на относительный документ, сохраняя значение ячейки как метку ссылки.

Извините за длинное описание.

Мне удалось создать функцию, которая делает именно то, что мне нужно для одной строки. Проблема для меня состоит в том, чтобы понять, как сделать это для каждой строки и как выполнить «поиск и сопоставление» с соответствующим документом на диске Google.

  function invoiceLinking() {

    var ss = SpreadsheetApp.getActiveSpreadsheet();

    // set active sheet to the second tab of the spreadsheet
    var activeSheet = ss.getSheets()[1]; 

    var data = activeSheet.getDataRange().getValues();
    var invoiceNumber = activeSheet.getRange(2,1).getValue();

    // get the drive folder containing the invoices by ID
    var folder = DriveApp.getFolderById("----Folder ID ----"); 
    var files = folder.getFiles(); 

    while (files.hasNext()) {
      var file = files.next();
      var fullname = file.getName();
      var url = file.getUrl();     
    }

      // check if the number of the invoice in the cell is contained in the name of the PDF file in the folder
      // applies an hyperlink to the realitve PDF to the cell with invoice number
      if (fullname.indexOf(invoiceNumber) !== -1 ) { 
        activeSheet.getRange(2,1).setValue('=HYPERLINK("'+url+'","'+invoiceNumber+'")'); 
      }
  }

1 Ответ

0 голосов
/ 31 октября 2018

Цель:

  • Связать имена счетов-фактур в ячейках листа с Drive PDFs

Поток:

  • Использование временного объекта для хранения имен и URL-адресов Drive PDF для последующего поиска всех данных ячейки

Фрагменты кода:

var range = activeSheet.getRange(2, 1, activeSheet.getLastRow() - 1, 1); //A2:A8
var invoiceNumbers = range.getValues();

var nameUrl = {}; //Object to hold name and Url

/*Fill the nameUrl*/
while (files.hasNext()) {
  var file = files.next();
  var fullname = file.getName();
  var url = file.getUrl();
  nameUrl[fullname] = url;
}

var links = invoiceNumbers.map(function(e) {
  return [
    '=HYPERLINK("' + nameUrl['Invoice-' + e[0] + '.pdf'] + '","' + e[0] + '")'
  ];
});
range.setValues(links);

Ссылки:

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