Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/google-apps-script/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Google apps script 从谷歌表单内容链接到谷歌硬盘_Google Apps Script - Fatal编程技术网

Google apps script 从谷歌表单内容链接到谷歌硬盘

Google apps script 从谷歌表单内容链接到谷歌硬盘,google-apps-script,Google Apps Script,我完全沉浸在代码问题中,似乎无法让它正常工作。我希望这群睿智的谷歌应用程序脚本天才能有所帮助 第一:我的谷歌硬盘使用以下文件夹结构(字母表中的每个字母都有第一个子文件夹,然后是每个事物的第二个子文件夹,例如 /Clients /A /Albert, Bob (1-15-0003) Re Matter /B /Bork, Mat (1-54-0003) Re Other Matter 我有一个Google Sheets文档,其中有各种各样的工作表,每个工作表在各自的单元格G2中引用

我完全沉浸在代码问题中,似乎无法让它正常工作。我希望这群睿智的谷歌应用程序脚本天才能有所帮助

第一:我的谷歌硬盘使用以下文件夹结构(字母表中的每个字母都有第一个子文件夹,然后是每个事物的第二个子文件夹,例如

/Clients
 /A
   /Albert, Bob (1-15-0003) Re Matter
 /B
  /Bork, Mat (1-54-0003) Re Other Matter
我有一个Google Sheets文档,其中有各种各样的工作表,每个工作表在各自的单元格G2中引用不同的物质编号。我想要一个脚本,可以自动搜索我的Google驱动器中的第二个子文件夹,并创建指向该文件夹的超链接

我的代码如下,但遗憾的是它不起作用。它似乎找不到子文件夹

function SearchFolder() {
// Searches Google Drive for the folder for the Active Sheet
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var sheet = ss.getActiveSheet();
  var searchTerm = ss.getRange('G2').getValue();
  var Folders = DriveApp.searchFolders("title contains '"+searchTerm.replace("'","\'")+"' and trashed = false and hidden = false");
  var Folder = Folders.next();
sheet.getRange('G2').setFormula("=HYPERLINK(\""+Folder.getUrl()+"\",\""+searchTerm+"\")");
}
预期结果是,如果我当前工作表的G2为1-15-0003,那么G2将被一个超链接替换,该超链接的Google驱动器URL指向/a/Albert的文件夹ID,Bob(1-15-0003)Re Matter

感谢您的帮助。

交互式目录树 这些函数与JStree JQuery插件一起工作,生成一个目录交互树。您必须添加两个Id,即数据存储文件夹的Id和树中根目录的Id。如果您想要一个webapp,这里还有一个doGet函数。我为您提供了几个文件对于html以及一些集成到遍历代码中的html代码来说,这是一个相当复杂的项目。可能有更好的方法来实现这一点

数据存储文件夹中的文件:TopToBodyWeb

<html>
    <head>
        <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/jstree/3.2.1/themes/default/style.min.css" />
        <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.12.4/jquery.min.js"></script>
        <script src="https://cdnjs.cloudflare.com/ajax/libs/jstree/3.2.1/jstree.min.js"></script>
        <style>.file{color:#d81840;}.contrls{padding:10px 10px 10px 10px;}.timestmp {width: 200px;margin-left:5px;padding:10px 0px 5px 50px;background-color:rgba(121, 25, 0, 0.36);color:white;}i.jstree-icon.jstree-themeicon{display:none;}</style>
        <script type="text/javascript">                                         
        $(function () { $('#selector').jstree({"core" : {"themes":{"variant":"large"}},"plugins" : [ "wholerow"]}); 

        });                                     
        </script>
        </head>
        <body><div id="selector"><ul>
这是traverse.gs:

function runtraverseFolder()
{
  var dirlist = loadDirlist();
  var controls = '<div class="cntrls"><input type="button" value="Exit" onClick="google.script.host.close()" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\
  <input type="button" value="Delete Cached Listing & Start Over" onClick="google.script.run.clearDirlist();" /></div><br />';
  var toptobody = loadFile('TopToBody');
  var bodytoend = loadFile('BodyToEnd');
  if(dirlist)
  {
    dispStatus('Stored MyDrive Directory List', toptobody + GStorage + bodytoend, 600, 500);
  }
  else
  {
    GStorage ='';
    GFlag = 0;
    traverseFolder(DriveApp.getFolderById('ThisistheIDoftheRootTraverseFolder'));
    saveDirlist();
    dispStatus('Current MyDrive Directory Listing', toptobody + GStorage + bodytoend, 600, 500);
  }
}

function getStoredDirectory()
{
  loadDirlist();  
  var toptobody = loadFile('TopToBodyWeb');
  var bodytoend = loadFile('BodyToEndWeb');
  return toptobody + GStorage + bodytoend;
}

function traverseFolder(folderObj) 
{
  glevel++;
  if(glevel < 2)
  {
    GStorage += '<li class="fldr" id="fd' + glii++  + '"' + 'data-jstree=\'{ "selected" : true, "opened" : true }\'' + '><a href="https://drive.google.com/open?id='+ folderObj.getId() +'" target="_blank" >Folder: ' +  folderObj.getName() + '</a></span>';
    //GStorage += '<li class="fldr" id="fd' + glii++  + '"' + 'data-jstree=\'{ "selected" : true, "opened" : true }\'' + '><a href="#" target="_blank" title="Dummy Link can not get file listing" >Folder: ' +  folderObj.getName() + '</a></span>';
  }
  else
  {
    GStorage += '<li class="fldr" id="fd' + glii++  + '"><a href="https://drive.google.com/open?id=' + folderObj.getId() +'" target="_blank" >Folder: ' +  folderObj.getName() + '</a></span>';
    //GStorage += '<li class="fldr" id="fd' + glii++  + '"><a href="#" target="_blank" title="Dummy Link can not get file listing." >Folder: ' +  folderObj.getName() + '</a></span>';
  }
  GStorage += '<ul id="ul'+ guli++ +'">';
  var subs = folderObj.getFolders();
  var files =  folderObj.getFiles();
  if(files)
  {
    //GStorage += '<ul id="ul'+ guli++ +'">';
    while(files.hasNext())
    {
      var fi = files.next();;
      GStorage += '<li class="file" id="fi' + glii++ + '"><a href="https://drive.google.com/open?id='+ fi.getId() +'" target="_blank" title="Right Click to Open File in new tab." >File: ' + fi.getName()  + '</a></span>';
    }
    //GStorage += '</ul>';
  }
  while (subs.hasNext()) 
  {
    traverseFolder(subs.next());
  }
  GStorage += '</ul></li>';
  glevel--;
}

function saveDirlist()
{
  var filename = 'CurrentDirectoryListing';
  var fldr = DriveApp.getFolderById(folderID);
  var fldrname = fldr.getName();
  var file = fldr.getFilesByName(filename);
  var targetFound = false;
  var timeStamp = '<div class="timestmp">' + Utilities.formatDate(new Date(), "GMT-7", "yyyy-MM-dd HH:mm:ss") + '</div>';
  while(file.hasNext())
  {
    var fi = file.next();
    var target = fi.getName();
    if(target == filename)
    {
      targetFound = true;
      fi.setContent(timeStamp + GStorage);
      SpreadsheetApp.getUi().alert('Directory Listing was updated using: ' + target);    }
  }
  if(!targetFound)
  {
    var created = fldr.createFile('CurrentDirectoryListing',timeStamp + GStorage);
    if(created)
    {
      //SpreadsheetApp.getUi().alert( 'Directory Listing was stored here: ' + fldr.getName() + '/' + created.getName());
    }
    else
    {
      SpreadsheetApp.getUi().alert('Unknown Error: Directory List was not stored');
    }
  }
}

function loadDirlist()
{
  var filename = 'CurrentDirectoryListing';
  var fldr = DriveApp.getFolderById(folderID);
  var file = fldr.getFilesByName(filename);
  var targetFound = false;
  while(file.hasNext())
  {
    var fi = file.next();
    var target = fi.getName();
    if(target == filename)
    {
      targetFound = true;
      GStorage = fi.getBlob().getDataAsString();
      //SpreadsheetApp.getUi().alert('Directory Listing was retreived from: ' + fldr.getName() + '/' + target);
    }
  }
  return targetFound;
}

function clearDirlist()
{
  var filename = 'CurrentDirectoryListing';
  var fldr = DriveApp.getFolderById(folderID)
  var file = fldr.getFilesByName(filename);
  var targetFound = false;
  while(file.hasNext())
  {
    var fi = file.next();
    var target = fi.getName();
    if(target == filename)
    {
      targetFound = true;
      fldr.removeFile(fi);
      //SpreadsheetApp.getUi().alert('File: ' + filename + ' was removed from: ' + fldr.getName() + '/' + target);
    }
  }
  return targetFound;
}

This is utility.gs:

function dispStatus(title,html,width,height)
{
// Display a modeless dialog box with custom HtmlService content.
  var title = typeof(title) !== 'undefined' ? title : 'No Title Provided';
  var width = typeof(width) !== 'undefined' ? width : 250;
  var height = typeof(height) !== 'undefined' ? height : 300;
  var html = typeof(html) !== 'undefined' ? html : '<p>No html provided.</p>';
  var htmlOutput = HtmlService
     .createHtmlOutput(html)
     .setWidth(width)
     .setHeight(height);
 SpreadsheetApp.getUi().showModelessDialog(htmlOutput, title);
} 
函数runtraverseFolder() { var dirlist=loadDirlist(); 风险值控制\
; var toptobody=loadFile('toptobody'); var bodytoend=loadFile('bodytoend'); if(dirlist) { dispStatus('存储的MyDrive目录列表',toptobody+GStorage+bodytoend,600500); } 其他的 { GStorage=''; GFlag=0; traverseFolder(DriveApp.getFolderById('ThisIstheidOfRootTraverseFolder'); saveDirlist(); dispStatus('当前MyDrive目录列表',toptobody+GStorage+bodytoend,600500); } } 函数getStoredDirectory() { loadDirlist(); var toptobody=loadFile('TopToBodyWeb'); var bodytoend=loadFile('BodyToEndWeb'); 返回toptobody+G存储+Body ToEnd; } 函数遍历文件夹(folderObj) { glevel++; 如果(glevel<2) { GStorage+='
  • ; //GStorage+='
  • ; } 其他的 { GStorage++'
  • ; //GStorage++'
  • ; } GStorage+='
      ; var subs=folderObj.getFolders(); var files=folderObj.getFiles(); 如果(文件) { //GStorage+='
        ; while(files.hasNext()) { var fi=files.next();; GStorage++'
      • ; } //GStorage+='
      '; } while(subs.hasNext()) { traverseFolder(subs.next()); } GStorage+='
  • '; 格莱维尔--; } 函数saveDirlist() { 变量文件名='CurrentDirectoryListing'; var fldr=DriveApp.getFolderById(folderID); var fldrname=fldr.getName(); var file=fldr.getFilesByName(文件名); var targetFound=false; var timeStamp=''+Utilities.formatDate(新日期(),“GMT-7”,“yyyy-MM-dd HH:MM:ss”)+''; while(file.hasNext()) { var fi=file.next(); var target=fi.getName(); 如果(目标==文件名) { targetFound=true; fi.setContent(时间戳+GStorage); SpreadsheetApp.getUi().alert('目录列表已使用“+target”更新;} } 如果(!targetFound) { var created=fldr.createFile('CurrentDirectoryListing',时间戳+GStorage); 如果(已创建) { //SpreadsheetApp.getUi().alert('目录列表存储在此处:'+fldr.getName()+'/'+created.getName()); } 其他的 { SpreadsheetApp.getUi().alert('未知错误:未存储目录列表'); } } } 函数loadDirlist() { 变量文件名='CurrentDirectoryListing'; var fldr=DriveApp.getFolderById(folderID); var file=fldr.getFilesByName(文件名); var targetFound=false; while(file.hasNext()) { var fi=file.next(); var target=fi.getName(); 如果(目标==文件名) { targetFound=true; GStorage=fi.getBlob().getDataAsString(); //SpreadsheetApp.getUi().alert('目录列表是从以下位置检索的:'+fldr.getName()+'/'+target); } } 返回targetFound; } 函数clearDirlist() { 变量文件名='CurrentDirectoryListing'; var fldr=DriveApp.getFolderById(folderID) var file=fldr.getFilesByName(文件名); var targetFound=false; while(file.hasNext()) { var fi=file.next(); var target=fi.getName(); 如果(目标==文件名) { targetFound=true; fldr.removeFile(fi); //SpreadsheetApp.getUi().alert('文件:'+filename+'已从:'+fldr.getName()+'/'+target中删除); } } 返回targetFound; } 这是utility.gs: 函数dispStatus(标题、html、宽度、高度) { //显示具有自定义HtmlService内容的无模式对话框。 var title=typeof(title)!=“未定义”?title:“未提供标题”; 变量宽度=类型(宽度)!=“未定义”?宽度:250; 变量高度=类型(高度)!=“未定义”?高度:300; var html=typeof(html)!=“未定义”?html:“未提供html。

    ”; var htmlOutput=HtmlService .createHtmlOutput(html) .setWidth(宽度) .设置高度(高度); SpreadsheetApp.getUi().showModelessDialog(htmlOutput,标题); }
    作为跟进,我认为我的错误在getvalue命令中。我的代码现在正在工作(显然已经更改了相关单元格,并假设shee
      </ul></div></body></html>
    
    </ul></div><div class="cntrls"><input type="button" value="Exit" onClick="google.script.host.close();" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
    <input type="button" value="Delete Cache & Exit" onClick="google.script.run.clearDirlist();google.script.host.close();" /></div><br /></body></html>
    
    var GStorage = '';
    var folderID = "TheIDofDataStorageFolderGoesHere";
    var guli = 0;
    var glii = 0;
    var glevel = 0;
    
    function onOpen()
    {
      var ui = SpreadsheetApp.getUi();
      ui.createMenu('My Tools')
                .addItem('Dir MyDrive','runtraverseFolder')
                .addToUi();
    }
    
    function runFile()
    {
      var file = loadFile();
      if(file)
      {
        dispStatus('Stored MyDrive Directory List', file, 1000, 600);
      }
      else
      {
        SpreadsheetApp.getUi().alter('File not found in function runfile');
      }
    }
    
    function loadFile(filename)
    {
      var filename = (typeof(filename) !== 'undefined')? filename : 'UploadFile';
      var fldr = DriveApp.getFolderById(folderID);
      var file = fldr.getFilesByName(filename);
      var s = '';
      while(file.hasNext())
      {
        var fi = file.next();
        var target = fi.getName();
        if(target == filename)
        {
          s = fi.getBlob().getDataAsString();
        }
      }
      return s;
    }
    
    function delFile(filename)
    {
      var filename = (typeof(filename) !== 'undefined')? filename : 'UploadFile';
      var fldr = DriveApp.getFolderById(folderID)
      var file = fldr.getFilesByName(filename);
      var targetFound = false;
      while(file.hasNext())
      {
        var fi = file.next();
        var target = fi.getName();
        if(target == filename)
        {
          targetFound = true;
          fldr.removeFile(fi);
          SpreadsheetApp.getUi().alert('File: ' + filename + ' was removed from: ' + fldr.getName() + '/' + target);
        }
      }
      return targetFound;
    }
    
    function doGet()
    {
      var output=HtmlService.createHtmlOutput(getStoredDirectory());
      return output.setXFrameOptionsMode(HtmlService.XFrameOptionsMode.ALLOWALL);
    }
    
    function runtraverseFolder()
    {
      var dirlist = loadDirlist();
      var controls = '<div class="cntrls"><input type="button" value="Exit" onClick="google.script.host.close()" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\
      <input type="button" value="Delete Cached Listing & Start Over" onClick="google.script.run.clearDirlist();" /></div><br />';
      var toptobody = loadFile('TopToBody');
      var bodytoend = loadFile('BodyToEnd');
      if(dirlist)
      {
        dispStatus('Stored MyDrive Directory List', toptobody + GStorage + bodytoend, 600, 500);
      }
      else
      {
        GStorage ='';
        GFlag = 0;
        traverseFolder(DriveApp.getFolderById('ThisistheIDoftheRootTraverseFolder'));
        saveDirlist();
        dispStatus('Current MyDrive Directory Listing', toptobody + GStorage + bodytoend, 600, 500);
      }
    }
    
    function getStoredDirectory()
    {
      loadDirlist();  
      var toptobody = loadFile('TopToBodyWeb');
      var bodytoend = loadFile('BodyToEndWeb');
      return toptobody + GStorage + bodytoend;
    }
    
    function traverseFolder(folderObj) 
    {
      glevel++;
      if(glevel < 2)
      {
        GStorage += '<li class="fldr" id="fd' + glii++  + '"' + 'data-jstree=\'{ "selected" : true, "opened" : true }\'' + '><a href="https://drive.google.com/open?id='+ folderObj.getId() +'" target="_blank" >Folder: ' +  folderObj.getName() + '</a></span>';
        //GStorage += '<li class="fldr" id="fd' + glii++  + '"' + 'data-jstree=\'{ "selected" : true, "opened" : true }\'' + '><a href="#" target="_blank" title="Dummy Link can not get file listing" >Folder: ' +  folderObj.getName() + '</a></span>';
      }
      else
      {
        GStorage += '<li class="fldr" id="fd' + glii++  + '"><a href="https://drive.google.com/open?id=' + folderObj.getId() +'" target="_blank" >Folder: ' +  folderObj.getName() + '</a></span>';
        //GStorage += '<li class="fldr" id="fd' + glii++  + '"><a href="#" target="_blank" title="Dummy Link can not get file listing." >Folder: ' +  folderObj.getName() + '</a></span>';
      }
      GStorage += '<ul id="ul'+ guli++ +'">';
      var subs = folderObj.getFolders();
      var files =  folderObj.getFiles();
      if(files)
      {
        //GStorage += '<ul id="ul'+ guli++ +'">';
        while(files.hasNext())
        {
          var fi = files.next();;
          GStorage += '<li class="file" id="fi' + glii++ + '"><a href="https://drive.google.com/open?id='+ fi.getId() +'" target="_blank" title="Right Click to Open File in new tab." >File: ' + fi.getName()  + '</a></span>';
        }
        //GStorage += '</ul>';
      }
      while (subs.hasNext()) 
      {
        traverseFolder(subs.next());
      }
      GStorage += '</ul></li>';
      glevel--;
    }
    
    function saveDirlist()
    {
      var filename = 'CurrentDirectoryListing';
      var fldr = DriveApp.getFolderById(folderID);
      var fldrname = fldr.getName();
      var file = fldr.getFilesByName(filename);
      var targetFound = false;
      var timeStamp = '<div class="timestmp">' + Utilities.formatDate(new Date(), "GMT-7", "yyyy-MM-dd HH:mm:ss") + '</div>';
      while(file.hasNext())
      {
        var fi = file.next();
        var target = fi.getName();
        if(target == filename)
        {
          targetFound = true;
          fi.setContent(timeStamp + GStorage);
          SpreadsheetApp.getUi().alert('Directory Listing was updated using: ' + target);    }
      }
      if(!targetFound)
      {
        var created = fldr.createFile('CurrentDirectoryListing',timeStamp + GStorage);
        if(created)
        {
          //SpreadsheetApp.getUi().alert( 'Directory Listing was stored here: ' + fldr.getName() + '/' + created.getName());
        }
        else
        {
          SpreadsheetApp.getUi().alert('Unknown Error: Directory List was not stored');
        }
      }
    }
    
    function loadDirlist()
    {
      var filename = 'CurrentDirectoryListing';
      var fldr = DriveApp.getFolderById(folderID);
      var file = fldr.getFilesByName(filename);
      var targetFound = false;
      while(file.hasNext())
      {
        var fi = file.next();
        var target = fi.getName();
        if(target == filename)
        {
          targetFound = true;
          GStorage = fi.getBlob().getDataAsString();
          //SpreadsheetApp.getUi().alert('Directory Listing was retreived from: ' + fldr.getName() + '/' + target);
        }
      }
      return targetFound;
    }
    
    function clearDirlist()
    {
      var filename = 'CurrentDirectoryListing';
      var fldr = DriveApp.getFolderById(folderID)
      var file = fldr.getFilesByName(filename);
      var targetFound = false;
      while(file.hasNext())
      {
        var fi = file.next();
        var target = fi.getName();
        if(target == filename)
        {
          targetFound = true;
          fldr.removeFile(fi);
          //SpreadsheetApp.getUi().alert('File: ' + filename + ' was removed from: ' + fldr.getName() + '/' + target);
        }
      }
      return targetFound;
    }
    
    This is utility.gs:
    
    function dispStatus(title,html,width,height)
    {
    // Display a modeless dialog box with custom HtmlService content.
      var title = typeof(title) !== 'undefined' ? title : 'No Title Provided';
      var width = typeof(width) !== 'undefined' ? width : 250;
      var height = typeof(height) !== 'undefined' ? height : 300;
      var html = typeof(html) !== 'undefined' ? html : '<p>No html provided.</p>';
      var htmlOutput = HtmlService
         .createHtmlOutput(html)
         .setWidth(width)
         .setHeight(height);
     SpreadsheetApp.getUi().showModelessDialog(htmlOutput, title);
    } 
    
    function SearchFolder() {
    // Searches Google Drive for the folder for the Active Sheet
      var ss = SpreadsheetApp.getActiveSpreadsheet();
      var sheet = ss.getActiveSheet();
      var searchTerm = ss.getSheetName();
      var Folders = DriveApp.searchFolders("title contains '"+searchTerm.replace("'","\'")+"' and trashed = false and hidden = false");
      var Folder = Folders.next();
      sheet.getRange('K6').setFormula("=HYPERLINK(\""+Folder.getUrl()+"\",\""+searchTerm+"\")");
    }