使用Google应用脚本搜索Google云端硬盘中的文件和动态超链接到Google表格

时间:2018-10-27 11:16:58

标签: google-apps-script google-sheets google-drive-api

一段时间以来,我一直在寻找解决方案,但是现在该寻求帮助了:)

目标:根据文档名称,将指向G驱动器中存储的特定PDF文档的超链接添加到google工作表列中的所有单个单元格中。

我会更好地解释自己。这里有屏幕截图:

页面布局

我正在尝试用超链接(保持链接标签不变)代替A列中单元格的内容。超链接应指向Google驱动器中的文档,其中文件名包含此电子表格中相对单元格中显示的名称。

该函数应查找(对于A列的每个值)在G Drive文件夹(所有文档所在的位置)中,文件名应包含该值 。(该单元格只有发票编号,如屏幕截图中的一个一样,而文件在编号之前也带有“ Invoice-”,并以“ .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 :(得分:0)

目标:

  • 将工作表单元格发票名称链接到云端硬盘

流量:

  • 使用临时对象存储云端硬盘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);

参考文献: