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;

}

【素材下载】

https://kdocs.cn/l/cpkHrilO4ade

贵州省
浏览 2299
54 +1
58
11 +1
b5为合同编号,如何在M5插入查找相对应编号的文件夹超链接?
陕西省
回复
  • 举报
感谢分享
浙江省
回复
  • 举报
非常实用
陕西省
回复
  • 举报
很不错
安徽省
回复
  • 举报
很好
广东省
回复
  • 举报
非常感谢
广东省
回复
  • 举报
4,666
福建省
回复
  • 举报
陈龙-财税咨询筹划
实用,点赞
湖北省
回复
  • 举报
厉害,方便
江苏省
回复
  • 举报
很不错 值得推荐
湖南省
回复
  • 举报
感谢分享
山西省
回复
  • 举报
非常实用的代码
吉林省
回复
  • 举报
境随心转
感谢分享!👍
内蒙古
回复
  • 举报
陶泽
厉害,很方便
云南省
回复
  • 举报
有用
广西
回复
  • 举报
很好
山东省
回复
  • 举报
WPS_1702025501
很好
福建省
回复
  • 举报
很实用,超赞的
山西省
回复
  • 举报
很实用,超赞👍