VB.Net如何调整代码按文件名自然日期顺序排序目录Excel文件
调整方案
核心修改逻辑是将排序依据从「文件最后写入时间」替换为「文件名解析得到的真实日期」,同时处理英文月份缩写的跨区域解析兼容问题,避免非英文系统下解析失败。
关键调整点
- 移除原有基于
LastWriteTime的排序、Reverse倒序逻辑 - 提取每个Excel文件的无后缀文件名,严格按照
MMM yyyy格式解析为标准DateTime类型作为排序键 - 指定英文(美国)文化区域做日期解析,适配Jan、Feb这类英文月份缩写的识别,不受系统默认区域设置影响
修改后完整代码
首先需要提前导入所需命名空间:
Imports System.IO Imports System.Globalization
核心文件遍历逻辑:
' 初始化英文文化配置,用于解析3位英文月份缩写 Dim enUsCulture As New CultureInfo("en-US") ' 按文件名对应的自然日期正序排列(最早月份 -> 最新月份) Dim targetFiles = New DirectoryInfo(MY_PATH).GetFiles("*.xlsx", SearchOption.TopDirectoryOnly) .OrderBy(Function(fileInfo) DateTime.ParseExact( Path.GetFileNameWithoutExtension(fileInfo.Name), "MMM yyyy", enUsCulture, DateTimeStyles.None )) For Each f As FileInfo In targetFiles ' 原有业务处理代码 Next
可选配置
- 如果需要按日期倒序(最新月份 -> 最早月份),直接将代码中的
OrderBy替换为OrderByDescending即可,比排序后调用Reverse()执行效率更高 - 若目录中可能存在不符合
[MMM yyyy].xlsx命名规则的文件,可以把ParseExact换成TryParseExact做容错过滤,避免解析报错中断流程
内容的提问来源于stack exchange,提问作者user8721
相关产品推荐
相关产品推荐

