【问题标题】:How to get files from google drive by filtering based on 'Unknown' criteria with the apps script?如何通过使用应用程序脚本根据“未知”条件进行过滤来从谷歌驱动器获取文件?
【发布时间】:2020-11-18 08:33:59
【问题描述】:

我想使用 GASgoogle drive 中检索文件列表。 所以我想要基于所有者为空的文件列表。 对于我们在共享驱动器上创建的文件,所有者不存在。 如果我们尝试强制所有者名称,它会得到一个错误。

例如这样:

file.getOwner().getName();

无法从文件列表中检索。 我尝试添加基于空所有者的过滤器,我想说未知

function getfilesUnknown () {
  var ss = SpreadsheetApp.getActiveSpreadsheet ();
  var st = ss.getActiveSheet ();
  var files = DriveApp.getFiles ();
  var counter = 0;
  while (files.hasNext () && counter <21) {
    var file = files.next ();
    var data = [
      file.getName (),
      file.getUrl (),
      file.getOwner ()? file.getOwner (). getName (): 'Unknown'
    ];
    var filter = data.filter (v => v [2] === 'Unknown');
    counter ++;
    st.appendRow (filter);
  }
}

但文件列表无法检索。

似乎不建议使用while中的过滤器。 或许,这里的人们有其他解决方案。

【问题讨论】:

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


    【解决方案1】:

    我不确定这是否是最好的方法。

    但是由于在所有者不存在时您在file.getOwner().getName() 收到错误,因此请尝试使用try...catch 来捕获错误。

    即如果有错误传递Unknown,否则传递文件所有者的名字。

    function getfilesUnknown() {
      var ss = SpreadsheetApp.getActiveSpreadsheet();
      var st = ss.getActiveSheet();
      var files = DriveApp.getFiles();
      var counter = 0;
      var data = [];
      while (files.hasNext() && counter<21) {
        var file = files.next();
        
        try{
          data.push([file.getOwner().getName()]);
        }
        catch(e){
          data.push(['Unknown']);
        }             
        counter++; 
      }
      
      st.getRange(st.getLastRow()+1,1,data.length,1).setValues(data);
    }
    

    请注意,您的代码没有得到很好的优化。您在 data 数组中添加信息,但随后您仅过滤特定值。因此无需使用其他项目,因为它们会减慢您的代码速度。

    另一个注意事项是您不推荐使用 appendRow 迭代。而是在 for 循环之外使用 setValues 一次。

    【讨论】:

      猜你喜欢
      • 2012-10-01
      • 2016-06-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-07-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多