Javascript 在Docslist中查找文件夹是否有子文件夹,以及该子文件夹是否有子文件夹,依此类推
我想知道是否可以在包含其他文件夹的文件夹中循环,并且其他文件夹包含其他文件夹,等等,以动态方式循环。我不知道有多少子文件夹有子文件夹,想找出一种方法来检查这与硬编码。向下走两层很容易,但在这之后,我被困在如何处理多分支并以一种我以后可以操作的方式存储它的问题上。有什么建议吗?最后,文件夹结构将用于创建动态谷歌网站布局 以下是我迄今为止的一个例子:Javascript 在Docslist中查找文件夹是否有子文件夹,以及该子文件夹是否有子文件夹,依此类推,javascript,google-apps-script,Javascript,Google Apps Script,我想知道是否可以在包含其他文件夹的文件夹中循环,并且其他文件夹包含其他文件夹,等等,以动态方式循环。我不知道有多少子文件夹有子文件夹,想找出一种方法来检查这与硬编码。向下走两层很容易,但在这之后,我被困在如何处理多分支并以一种我以后可以操作的方式存储它的问题上。有什么建议吗?最后,文件夹结构将用于创建动态谷歌网站布局 以下是我迄今为止的一个例子: function myFunction() { //Get the folder var topFolders = DocsList.getFol
function myFunction() {
//Get the folder
var topFolders = DocsList.getFolder('TestFolder');
var lvlOneFolders = topFolders.getFolders();
var num1Folders = lvlOneFolders.length;
var someArray = [];
for (var i = 0; i < num1Folders; i++){
someArray[i] = lvlOneFolders[i].getFolders();
}
Logger.log(someArray);
}
函数myFunction(){
//获取文件夹
var topFolders=DocsList.getFolder('TestFolder');
var lvlOneFolders=topFolders.getFolders();
var numfolders=lvlOneFolders.length;
var someArray=[];
对于(var i=0;i
问候,
肖恩
function myFunctionTest() {
var site = SitesApp.getSite('finance-in-motion.com', 'test-site');
//Get the folder
var rootFolder = DocsList.getFolder('TestFolder');
var rootName = rootFolder.getName();
var files = rootFolder.getFiles();
var page;
site.createWebPage(rootName, rootName,"<h1>What evs21</h1>");
page = site.getChildByName(rootName);
createFiles(page,files);
recursTest(rootFolder);
}
function recursTest (currentFolder){
var curLength=currentFolder.getFolders().length;
for(var i = curLength; i > 0; i --){
var folders = currentFolder.getFolders();
var parentName = currentFolder.getName();
var foldername = folders[i-1].getName();
var files = folders[i-1].getFiles();
getSiteTest(foldername,parentName,files);
if(folders[i-1].getFolders().length != 0){
recursTest(folders[i-1]);
}
}
}
function getSiteTest(title,parent,files) {
var site = SitesApp.getSite('finance-in-motion.com', 'test-site');
var matches = site.search(parent);
var page = matches[0];
var child;
//create the sibling page
page.createWebPage(title, title,"<h1>What evs21</h1>");
child = page.getChildByName(title);
createFiles(child,files);
}
function createFiles(page,files){
var name;
if (files.length !=0){
for (i in files){
name = files[i].getName();
page.createWebPage(name,name,"<h1>What evs21</h1>");
}
}
}
函数myFunctionTest(){
var site=SitesApp.getSite('finance-in-motion.com','testsite');
//获取文件夹
var rootFolder=DocsList.getFolder('TestFolder');
var rootName=rootFolder.getName();
var files=rootFolder.getFiles();
var-page;
创建网页(rootName,rootName,“What evs21”);
page=site.getChildByName(rootName);
创建文件(页面,文件);
递归测试(rootFolder);
}
函数递归测试(currentFolder){
var curLength=currentFolder.getFolders().length;
对于(var i=卷曲长度;i>0;i--){
var folders=currentFolder.getFolders();
var parentName=currentFolder.getName();
var foldername=folders[i-1].getName();
var files=folders[i-1].getFiles();
getSiteTest(foldername、parentName、文件);
if(文件夹[i-1].getFolders().length!=0){
递归测试(文件夹[i-1]);
}
}
}
函数getSiteTest(标题、父级、文件){
var site=SitesApp.getSite('finance-in-motion.com','testsite');
var matches=site.search(父级);
变量页=匹配项[0];
var-child;
//创建同级页面
page.createWebPage(标题,标题,“What evs21”);
child=page.getChildByName(标题);
创建文件(子文件、文件);
}
函数createFiles(页面,文件){
变量名;
如果(files.length!=0){
用于(文件中的i){
name=文件[i].getName();
page.createWebPage(名称,名称,“What evs21”);
}
}
}
编辑:使用DavidF better answer我编写了这个绑定到电子表格的脚本,它以不同文件类型和总计的列显示了一个漂亮的结果
只是为了说明;-)
Edit2:我用URL替换了ID,这样我就可以直接从SS转到那个文件夹,并添加了执行时间显示+一些格式和公式。
(注意:container.getUrl()对于根文件夹不能正常工作,这就是为什么我在IF条件下将其替换为直接url的原因)
代码如下:
function onOpen() {
var menuEntries = [ {name: "Update data", functionName: "listFolders"}
];
var ss = SpreadsheetApp.getActiveSpreadsheet();
ss.addMenu("ListFolders",menuEntries);//
}
function listFolders() {
var start = new Date();
var dateString = Utilities.formatDate(new Date(),Session.getTimeZone(), 'MMM-dd-yyyy');
var topFolder = DocsList.getRootFolder() ; // start point
var foldersArray = [];
foldersArray = getFolders(topFolder.getName().replace('Root','MyDrive'),topFolder,foldersArray);
foldersArray.unshift(['Folders url','path','# SubFolders','# Spreadsheets','# Docs','# Forms','# Drawings','# Presentations','# others',])
// Logger.log(foldersArray)
var l = foldersArray.length
var duration = (new Date().getTime()-start.getTime())/1000;
var durationString = Utilities.formatString("%01.1f", duration)
var sh = SpreadsheetApp.getActiveSheet().clear();
sh.getRange(1,1,1,foldersArray[0].length).setBackground('#ffffaa').setBorder(true,true,true,true,true,true).setFontWeight('bold');
sh.getRange(1,1,l,foldersArray[0].length).setValues(foldersArray).setVerticalAlignment('middle').setWrap(false);
sh.getRange(l+1,2,1,foldersArray[0].length-1)
.setFormulas([['="Situation on '+dateString+' ..............Total = "&SUM(C'+(l+1)+':I'+(l+1)+')','=SUM(C2:C'+l+')','=SUM(D2:D'+l+')','=SUM(E2:E'+l+')','=SUM(F2:F'+l+')','=SUM(G2:G'+l+')','=SUM(H2:H'+l+')','=SUM(I2:I'+l+')']])
.setBackground('#ffffaa').setBorder(true,true,true,true,true,true).setFontWeight('bold').setVerticalAlignment('middle').setHorizontalAlignment('right');
sh.getRange(l+1,1).setFontColor('grey').setFontSize(9).setVerticalAlignment('middle').setHorizontalAlignment('center').setValue('execution time: '+durationString+' Seconds');
sh.setFrozenRows(1);
}
function getFolders(path, container,arrayin) {
var folders = container.getFolders(0, 300);
var folderCount = folders.length;
var ssCount = container.getFilesByType(DocsList.FileType.SPREADSHEET).length;
var docCount = container.getFilesByType(DocsList.FileType.DOCUMENT).length;
var formCount = container.getFilesByType(DocsList.FileType.FORM).length;
var drawCount = container.getFilesByType(DocsList.FileType.DRAWING).length;
var presCount = container.getFilesByType(DocsList.FileType.PRESENTATION).length;
var otherCount = container.getFilesByType(DocsList.FileType.OTHER).length;
if(path=='MyDrive'){arrayin.push(['https://drive.google.com/?hl=fr&tab=wo#my-drive',path,folderCount,ssCount,docCount,formCount,drawCount,presCount,otherCount])}
else{arrayin.push([container.getUrl(),path,folderCount,ssCount,docCount,formCount,drawCount,presCount,otherCount])}
for (var i=0;i<folders.length;i++) {
var thisFolder = folders[i].getName();
var thisPath = path+"/"+thisFolder;
getFolders(thisPath,folders[i],arrayin)
}
return arrayin;
}
函数onOpen(){
var menuEntries=[{name:“更新数据”,functionName:“listFolders”}
];
var ss=SpreadsheetApp.getActiveSpreadsheet();
ss.addMenu(“列表文件夹”,菜单)//
}
函数listFolders(){
var start=新日期();
var dateString=Utilities.formatDate(new Date(),Session.getTimeZone(),'MMM dd yyyy');
var topFolder=DocsList.getRootFolder();//起点
var foldersArray=[];
foldersArray=getFolders(topFolder.getName().replace('Root','MyDrive'),topFolder,foldersArray);
unshift([“文件夹url”、“路径”、“子文件夹”、“电子表格”、“文档”、“表单”、“图纸”、“演示文稿”、“其他文档”])
//Logger.log(foldersArray)
var l=foldersArray.length
var duration=(new Date().getTime()-start.getTime())/1000;
var durationString=Utilities.formatString(“%01.1f”,持续时间)
var sh=SpreadsheetApp.getActiveSheet().clear();
sh.getRange(1,1,1,foldersArray[0].length).setBackground(“#ffffaa”).SetBackOrder(true,true,true,true,true,true),setFontWeight('bold');
sh.getRange(1,1,l,foldersArray[0].length).setValues(foldersArray).setVerticalAlignment('middle').setWrap(false);
sh.getRange(l+1,2,1,foldersArray[0]。长度-1)
.setFormulas(['=“关于'+dateString+'的情况………..Total=“&SUM(C'+(l+1)+':I'+(l+1)+','=SUM(C2:C'+l++'),'=SUM(D2:D'+l++'),'=SUM(E2:E'+l++'),'=SUM(F2:F'+l++'),'=SUM(G2:G'+l++'),'=SUM(H2:H'+l'),'=SUM(I2:I'+l++])]
.setBackground(“#ffffaa”).SetBackOrder(真、真、真、真、真、真)、setFontWeight('bold')、setVerticalAlignment('middle')、setHorizontalAlignment('right');
sh.getRange(l+1,1).setFontColor('grey').setFontSize(9).setVerticalAlignment('middle').setHorizontalAlignment('center').setValue('执行时间:'+durationString+'Seconds');
sh.setFrozenRows(1);
}
函数getFolders(路径、容器、阵列){
var folders=container.getFolders(0,300);
var folderCount=folders.length;
var ssCount=container.getFilesByType(DocsList.FileType.SPREADSHEET).length;
var docCount=container.getFilesByType(DocsList.FileType.DOCUMENT).length;
var formCount=container.getFilesByType(DocsList.FileType.FORM).length;
var drawCount=container.getFilesByType(DocsList.FileType.DRAWING).length;
var precount=container.getFilesByType(DocsList.FileType.PRESENTATION).length;
var otherCount=container.getFilesByType(DocsList.FileType.OTHER).length;
if(path=='MyDrive'){arrayin.push(['https://drive.google.com/?hl=fr&tab=wo#my-驱动器',路径,文件夹计数,ssCount,docCount,formCount,drawCount,PreCount,otherCount])中)
else{arrayin.push([container.getUrl(),path,folderCount,ssCount,docCount,formCount,drawCount,precount,otherCount]))
对于(var i=0;i编辑:使用DavidF better-answer我编写了这个电子表格绑定脚本,它得到了一个
function folderTree() {
var result = []
var foldersL1 = DocsList.getRootFolder().getFolders()
for(n=0;n<foldersL1.length;++n){
result.push(foldersL1[n].getName())
var foldersL2 = foldersL1[n].getFolders()
for(m=0;m<foldersL2.length;++m){
result.push(foldersL1[n].getName()+'/'+foldersL2[m].getName())
var foldersL3 = foldersL2[m].getFolders()
for(o=0;o<foldersL3.length;++o){
result.push(foldersL1[n].getName()+'/'+foldersL2[m].getName()+'/'+foldersL3[o].getName()+'/')
}
}
}
Logger.log(result)
}
function listFolders() {
var start = new Date();
var topFolder = DocsList.getFolderById(TOP) ; // start point
var foldersArray = [];
foldersArray = getFolders(topFolder.getName(),topFolder,foldersArray);
// do what you want with array of folder data
}
function getFolders(path, container,arrayin) {
Logger.log(arrayin)
var folders = container.getFolders(0, 300);
var folderCount = folders.length;
var fileCount = container.getFiles().length;
arrayin.push([container.getId(),path,fileCount,folderCount]);
Logger.log(path + " #files= "+fileCount+ " #folders = "+folderCount);
for (var i=0;i<folders.length;i++) {
var thisFolder = folders[i].getName();
var thisPath = path+"/"+thisFolder;
getFolders(thisPath,folders[i],arrayin)
}
return arrayin;
}