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

贵州省
浏览 3001
11
55
分享
55 +1
60
11 +1
全部评论 60
 
韩宇帆
看着还行
· 浙江省
回复
 
云淡风轻
试验了一下,只能提取一部分文件,不知道为什么。感谢分享
· 广东省
回复
 
人间惊鸿客
老师 如果只想获取当前文件夹的一级目录名 该怎么修改?
· 浙江省
回复
 
袁坤
b5为合同编号,如何在M5插入查找相对应编号的文件夹超链接?
· 陕西省
回复
 
赖丽萍
感谢分享
· 浙江省
回复
 
王萍
非常实用
· 陕西省
回复
 
饭饭&凡
很不错
· 安徽省
回复
 
꧁꫞꯭吃饭睡觉看抖音꫞꧂
很好
· 广东省
回复
 
~情比纸薄
非常感谢
· 广东省
回复
 
永不言弃
4,666
· 福建省
回复
 
陈龙-财税咨询筹划
实用,点赞
· 湖北省
回复
 
浅夏℡
厉害,方便
· 江苏省
回复
 
雷佳兴
很不错 值得推荐
· 湖南省
回复
 
A.襄垣大地保险荣玲玉
感谢分享
· 山西省
回复
 
火花兔子
非常实用的代码
· 吉林省
回复
 
境随心转
感谢分享!👍
· 内蒙古
回复
 
陶泽
厉害,很方便
· 云南省
回复
 
蓝小天他爸
有用
· 广西
回复
 
李武超
很好
· 山东省
回复
 
WPS_1702025501
很好
· 福建省
回复