JS宏获取所有子文件夹中的文件名称,并生成超链接,你还有更简洁的代码吗?
创作者俱乐部成员
上期我们讲了《JS宏选择文件夹,获取所有文件名并生成超链接》,有小伙伴问能不能连同子文件夹中的文件名也一并获取,下面安排。
⭐【运行效果】
选择文件夹,获取文件夹(含子文件夹)中的所有文件名称,并为每个文件生成超链接。
⭐【JSA代码】
按ALT+F11打开WPS宏编辑器,复制下方代码粘贴到编辑器中。
👉 | function 获取子文件夹中的所有文件名(){ //获取文件对话框 var ph=Application.FileDialog(msoFileDialogFolderPicker); Application.ScreenUpdating=false;//设置屏幕不刷新 ph.Show();//显示对话框 var PH=[...ph.SelectedItems];//把选中的文件夹名取成一个数组 if(PH.length==0){return;}//如果没有选择,退出 var FileNames=[];//用来存放所有文件名,最终要的数据 var GetAllFileName=(path)=>{//递归函数 if(path.length==0){return;}//如果传回的参数为空,结束递归 var temparr=[];//空数组用来保存文件夹的名字 path.forEach(i=>{//循环传进来的文件夹获取里面的文件名 var f=Dir(i+"\\",16);//第一次获取,文件夹名和文件名 while(f!=""){ if(f!="."&&f!=".."){ //避开根目录 //如果是文件夹放进临时数组 if(GetAttr(i+"\\"+f)!=32&&GetAttr(i+"\\"+f)!=1056){ temparr.push(i+"\\"+f+"\\"); }else{ //如果是文件名,则构建为超链接公式,放到最终数组 FileNames.push(['=HYPERLINK(\"'+i+'\\'+f+'\")']); } } f=Dir();//下一次获取 } }) return GetAllFileName(temparr);//把获取到的文件夹名称传回,并回调 } GetAllFileName(PH);//第一次调用。 Range("a:a").Value2=null;//清空A列 //输出文件名 Range("a1").Resize(FileNames.length,1).Value2=FileNames; } |
⭐【素材下载】