初学JSA 改写了一个自己写的, VBA获取文件清单的函数, 支持子文件夹
没找到粘贴代码的按钮 直接写到正文中吧
//函数: FileAllArr 查找指定文件夹含子文件夹内所有文件名或文件夹名(含路径)
function FileAllArr(PathFolder,FileFilter="*.*",Liwai="",SubFolder=true,boolInKZM= "",boolNoKZM="",StrSplitor="/") {
//函数: FileAllArr 查找指定文件夹含子文件夹内所有文件名或文件夹名(含路径)//参数: PathFolder 需查找的文件夹路径,不包含文件名
//参数: FileFilter 可选, 需要过滤的文件名,可省略,默认为:[*.*]
//参数: Liwai 可选, 剔除例外的文件路径,可省略,默认为:空,一般为:ThisWorkbook.Name
//参数: SubFolder 可选, 是否需要查找子文件夹内子文件夹,可省略,默认为:true
//参数: boolInKZM 可选, 需要包含哪些扩展名,可省略,默认为:空白=全部,可设置多个,[,]分割 例如:"JPG,JPEG,PNG,bmp,tiff,gif,pcx,tga,exif,fpx,svg,psd,cdr,pcd,dxf,ufo,eps,ai,raw,WMF,webp
//参数: boolNoKZM 可选, 需要排除哪些扩展名,可省略,默认为:空白=没有,可设置多个,[,]分割,例如:"xlsm,XLSX" 注意:XLS是不包含在:XLSM中的
//参数: StrSplitor 可选, 各级文件夹分隔符
//方法: let pathArr=FileAllArr(PathFolder,"*.xls?",ThisWorkbook.Name,true,".XLSX,.XLSM","","\\")
//作者: 北极狐工作室 QQ:14885553
//默认的分隔符号
if(StrSplitor.length == 0){StrSplitor = "/";}
if(FileFilter.length == 0){FileFilter="*.*";} //
//检查包含和排除:扩展名条件
if(boolInKZM.trim().length> 0){
boolInKZM = "|"+boolInKZM.trim().replace(",", "|").toUpperCase()+"|"
} else {
boolInKZM = ""
}
if(boolNoKZM.trim().length> 0){
boolNoKZM = "|"+boolNoKZM.trim().replace(",", "|").toUpperCase()+"|"
} else {
boolNoKZM = ""
}
let X,folder,path,folderA,file,strTemp,BoolA,BoolB
folder=PathFolder //防止参数值因为函数而产生变化 用一个局部变量代替
folder = folder.replace(/(\\|\/)$/, "");//去除最后一个正斜杠或者反斜杠(如果存在的话)
folder = folder.replace(/\//g, "\\"); //全部 正斜杠 弄成 反斜杠
let pathArr = [] //空白数组备用 放文件名
with(Application.FileSearch){
NewSearch();
SearchSubFolders=SubFolder;//是否查询子文件夹
FileName=FileFilter;//文件类型
LookIn=folder;//路径
Execute(msoSortByFileName);//查询类型
if(FoundFiles.Count==0){ //获取所有文件
return pathArr = [""] //退出
}
for(let i=1;i<=FoundFiles.Count;i++){
path=FoundFiles.Item(i);
if(StrSplitor!= "\\"){
path=path.replace(/\//g, "\\"); //全部 正斜杠 弄成 反斜杠
}
BoolA=true
BoolB=true
if(Liwai.length>0){ //排除指定文件名
let fName=path.replace(folder+"\\", "")
if(Liwai.toUpperCase()==fName.toUpperCase()){
BoolA=false
}
}
if(BoolA==true && BoolA==true){ //符合包含条件,同时符合排除条件
if(boolInKZM!= "" || boolNoKZM!=""){ ////扩展名判断boolInKZM= "",boolNoKZM=""
KZM=path.substr(path.lastIndexOf(".")).trim().toUpperCase() //方法可返回一个指定的字符串值最后出现的位置
if(boolInKZM!= ""){ // 检查扩展名是否是包含在内的
if(boolInKZM.indexOf("|" + KZM + "|")>=0){ //子字符串在字符串中的位置
BoolA=true
} else {
BoolA=false
}
}
if(boolNoKZM!= ""){ // 检查扩展名是否是不包含在内的
if(boolNoKZM.indexOf("|" + KZM + "|")>=0){ //子字符串在字符串中的位置
BoolB=false
} else {
BoolB=true
}
}
}
}
if(BoolA==true && BoolB==true){ //符合包含条件,同时符合排除条件
if(StrSplitor!= "\\"){ //按指定分隔符 输出文件名
path=path.replace(/\\/g, "/"); //全部 正斜杠 弄成 反斜杠
}
pathArr.push(path) //就保存文件路径
}
}
}
return pathArr
}
社区管理员