谷歌脚本:通过从工作表范围

时间:2017-07-12 11:09:24

标签: google-apps-script google-sheets

我想做什么?

我试图列出子文件夹中的所有文件"年度报告"在我的Google云端硬盘上访问我的Google电子表格 ,但

我的google云端硬盘上有很多文件夹和子文件夹

并且当我尝试运行代码以获取所有文件夹和文件的列表时,"超出了最大执行时间"

我的google云端硬盘文件夹的结构是

- My Drive

  - Subfolder 1: Documents by country or issue

       - Subfolder2 :Albania 

            - Subfolder3 :Annual Reports >files


      - Subfolder2 : Bulgaria 
            - Subfolder3 : Annual Reports >files

依此类推...适用于每个国家

所以,我设法设置我的子文件夹"文件按国家或问题"成为rootfolder并获取'年度报告'夹

如此脚本代码



var sheet = SpreadsheetApp.getActiveSheet();
function generateFolderTree() {
  sheet.clear();

  sheet.appendRow(["Folder Name", "Rootfolder name", "ID"]);

  var parent = DriveApp.getFoldersByName("Documents by country or issue").next();

  getChildFolders(parent);

}

function getChildFolders(parent) {

  var childFolders = parent.getFolders();

  var parentName = parent.getName();

  while (childFolders.hasNext()) {

    var childFolder = childFolders.next();

    fileName = childFolder.getName();
    root = parentName + "/" + fileName;
    fileID = childFolder.getId();

    if (fileName == "Annual Reports") {
      sheet.appendRow([fileName, root, fileID]);
    } else if (fileName == "_Annual Reports") {
      sheet.appendRow([fileName, root, fileID]);
    }




并且它有效,我在我的工作表上得到了这样的结果(无法上传图片,不知道为什么)

  

A栏|| B栏|| C栏

     

文件夹名称|| Rootfolder名称|| ID

     

年度报告||哥伦比亚/年度报告||
  0Bz02kQQ7_a6paTM1SmdpZ01HYjQ

     

_年度报告||斯洛伐克(SK)/ _年度报告|| 0BwW8rsOAeCzneUlDUk1pcGNlVU0

     

年度报告||瑞士(CH)/年度报告|| 0Bz02kQQ7_a6pZTJsWDR0elJTaDQ

所以我想知道***如何编写脚本来为每个国家/地区创建新工作表

从我在电子表格中获取的folderID中获取文件夹内的文件列表(例如从范围中获取值 - 列C)。

或者是否有推荐的方法让这更容易?

谢谢。

1 个答案:

答案 0 :(得分:0)

以下是一个示例:

function createSheetForEachCountry() {

  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var sheet = ss.getActiveSheet();

  var data = sheet.getRange(2, 2, sheet.getLastRow()-1, 2).getValues(); // Get country name and folder id

  for(var i = 0;i<data.length;i++){ // For all the id on the main sheet

    if(data[i][0] != "" && data[i][1] != ""){ // Check if we got some data
      var newSheet = ss.insertSheet(data[i][0]); // Create the sheet with the country name
      var files = DriveApp.getFolderById(data[i][1]).getFiles(); // Get files from folder

      while(files.hasNext()){ // While there is files
        var file = files.next(); // Look on the next file
        newSheet.appendRow([file.getId()]); // And add his id on the sheet
      }
    }
  }
}

评论应该让你知道它是如何运作的。