JS宏获取所有子文件夹中的文件名称,并生成超链接,你还有更简洁的代码吗?

懒人办公
懒人办公 Lv.1 新人创作者KVP

Lv.1 新人创作者

上期我们讲了《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

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