vba 批量把指定目录的csv文件删掉bom表头
分类:VBA
以下是一个使用 VBA 在指定目录中批量删除 CSV 文件 BOM 表头的示例:
Sub RemoveBOMFromCSVFiles()
Dim FolderPath As String
Dim Filename As String
Dim TempFilename As String
Dim TempFileContent As String
Dim FileContent As String
' 指定要处理的文件夹路径
FolderPath = "C:\YourFolderPath\"
' 检查文件夹是否存在
If Dir(FolderPath, vbDirectory) = "" Then
MsgBox "指定的文件夹路径不存在!", vbExclamation
Exit Sub
End If
' 获取目标文件夹中的所有 CSV 文件
Filename = Dir(FolderPath & "*.csv")
' 遍历每个 CSV 文件
Do While Filename <> ""
' 拼接当前文件的完整路径
Filename = FolderPath & Filename
' 读取文件内容
FileContent = ReadFileContent(Filename)
' 检查文件是否已经移除了 BOM 表头
If Left(FileContent, 3) = Chr(239) & Chr(187) & Chr(191) Then
' 移除 BOM 表头并备份文件
TempFilename = FolderPath & "temp_" & Format(Now(), "yyyymmdd_hhmmss") & ".csv"
TempFileContent = Mid(FileContent, 4)
WriteFileContent TempFilename, TempFileContent
' 删除原始文件
Kill Filename
' 重命名临时文件为原始文件名
Name TempFilename As Filename
' 输出处理结果
Debug.Print "已处理文件: " & Filename
Else
' 输出未处理文件的信息
Debug.Print "跳过文件: " & Filename & "(没有 BOM 表头)"
End If
' 获取下一个 CSV 文件
Filename = Dir
Loop
MsgBox "批量删除 BOM 表头完成!", vbInformation
End Sub
Function ReadFileContent(Filename As String) As String
Dim FileNumber As Integer
Dim FileContent As String
FileNumber = FreeFile
Open Filename For Input As FileNumber
FileContent = Input$(LOF(FileNumber), FileNumber)
Close FileNumber
ReadFileContent = FileContent
End Function
Sub WriteFileContent(Filename As String, Content As String)
Dim FileNumber As Integer
FileNumber = FreeFile
Open Filename For Output As FileNumber
Print #FileNumber, Content
Close FileNumber
End Sub
请将示例中的 FolderPath
替换为要处理的目标文件夹路径。该代码会遍历指定目录中的所有 CSV 文件,并检查文件是否以 BOM 表头开始。如果文件包含 BOM 表头,它会将 BOM 表头移除并重命名为原始文件名。
请注意,在运行该代码之前,请务必备份目标文件夹中的重要文件,以防止数据丢失。