javascript - 我如何driveapp使用谷歌脚本按字母顺序获取文件夹中的文件

标签 javascript google-apps-script drive

我从 Google 云端硬盘中的文件夹中获取文件,然后尝试在电子表格中插入指向它们的链接。问题是使用的文件 var ezIter =folderez.getFiles();似乎以随机顺序返回。 我希望它们按字母顺序排列。这可能吗?

这是我目前的代码。它工作得很好,但它链接到的文件没有顺序,这让一切都变得困惑。

function getFiles() {

  var dApp = DriveApp;
  var vfolder = dApp.getFoldersByName("video").next();
  var yearfolder = vfolder.getFoldersByName("2018").next();
  var gamefolder = yearfolder.getFoldersByName("game1").next();
  var folderez = gamefolder.getFoldersByName("ez").next();
  var ezIter = folderez.getFiles();
  var ss = SpreadsheetApp.getActiveSpreadsheet().getSheetByName(yearfolder+gamefolder);

  var i = 2;

  while (ezIter.hasNext()) {
    var file = ezIter.next();
    var name = file.getName();
    var url = file.getUrl();
    range = 'AC'+(i);
    var filename = 'ezvideo'+(i-1);
    var semi = ";";  
    var hyp = "=hyperlink(\"";
    var quot = "\"";
    var clos = ")";
    var title = hyp  + url + quot + semi + quot + filename + quot + clos;  // str='=hyperlink("' + f.getUrl() + '","' + f.getName() + '")';
    ss.getRange(range).setValue(title);   
    i++;
}

最佳答案

我不知道这个 API 是如何工作的,但这可能会帮助您对文件进行排序。

首先,完全删除 while 循环并粘贴以下内容:

var files = [];

// creates an array of file objects
while (ezIter.hasNext()) {
    files.push(ezIter.next());
}

// sorts the files array by file names alphabetically
files = files.sort(function(a, b){
    var aName = a.getName().toUpperCase();
    var bName = b.getName().toUpperCase();

    return aName.localeCompare(bName);
});

files.forEach(function(file){
    var name = file.getName();
    var url = file.getUrl();
    range = 'AC'+(i);
    var filename = 'ezvideo'+(i-1);
    var semi = ";";  
    var hyp = "=hyperlink(\"";
    var quot = "\"";
    var clos = ")";
    var title = hyp  + url + quot + semi + quot + filename + quot + clos;  // str='=hyperlink("' + f.getUrl() + '","' + f.getName() + '")';
    ss.getRange(range).setValue(title);   
    i++;
});

更新:根据tehhowch的优化建议,您可以为每个文件调用一次getName,如下所示:

var files = [];

// creates an array of file objects
while (ezIter.hasNext()) {
    var file = ezIter.next();
    files.push({name: file.getName(), url: file.getUrl()});
}

// sorts the files array by file names alphabetically
files = files.sort(function(a, b){
    var aName = a.name.toUpperCase();
    var bName = b.name.toUpperCase();

    return aName.localeCompare(bName);
});

files.forEach(function(file){
    var name = file.name;
    var url = file.url;
    range = 'AC'+(i);
    var filename = 'ezvideo'+(i-1);
    var semi = ";";  
    var hyp = "=hyperlink(\"";
    var quot = "\"";
    var clos = ")";
    var title = hyp  + url + quot + semi + quot + filename + quot + clos;  // str='=hyperlink("' + f.getUrl() + '","' + f.getName() + '")';
    ss.getRange(range).setValue(title);   
    i++;
});

关于javascript - 我如何driveapp使用谷歌脚本按字母顺序获取文件夹中的文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55003323/

相关文章:

google-apps-script - 从 Google Apps 脚本获取 TextBox 值

javascript - 在javascript(GAS)中将字符串转换为多维数组中的日期的问题

api - 检测 Google 云端硬盘更改

PHP访问服务器驱动

javascript - 如何使用 jQuery 在 2 个排序列表之间拖动项目?

javascript - 如何淡出导航栏的最右侧并向其添加新按钮

javascript - 从两个不同的值创建一个公共(public)键,不考虑顺序

javascript - 动态创建表单栏杆

google-apps-script - 如何在使用脚本计算公式之前避免从公式单元格复制值?

go - 使用 Google Golang Sheets API V4/Drive API V3 获取电子表格 ID?