目录
- 一. 批量创建Excel文件
- 1.1 VBA的方式
- 1.2 Powershell方式
- 二. 批量删除文件
一. 批量创建Excel文件
1.1 VBA的方式
Sub CreateFiles()
Dim strPath As String, strFileName As String
Dim i As Long, r
Dim pathSeparator As String
On Error Resume Next
' 用户选择文件夹路径
With Application.FileDialog(msoFileDialogFolderPicker)
' 如果用户未选择文件夹则退出程序
If .Show Then
strPath = .SelectedItems(1)
Else
Exit Sub
End If
End With
' 给路径添加分隔符
pathSeparator = Application.pathSeparator
If Right(strPath, 1) <> pathSeparator Then
strPath = strPath & pathSeparator
End If
' 取消屏幕刷新
Application.ScreenUpdating = False
' 取消警告提示,当有重名工作簿时直接覆盖
Application.DisplayAlerts = False
' 数据装入数组r
r = Range("A1:A" & Cells(Rows.Count, 1).End(xlUp).Row)
' 标题不要,因此从第2个元素开始遍历数组r
For i = 2 To UBound(r)
' 新建工作簿
With Workbooks.Add
' 以指定名称、默认文件类型保存工作簿
.SaveAs strPath & r(i, 1), xlWorkbookDefault
' 关闭工作簿
.Close True
End With
Next
Application.ScreenUpdating = True
Application.DisplayAlerts = True
MsgBox "Excel批量创建完成。"
End Sub
1.2 Powershell方式
# 指定要创建的文件数量
$excelCount = 5
# 指定文件名前缀
$fileNamePrefix = "Excel文件"
# 循环创建指定数量的 Excel 文件
1..$excelCount | ForEach-Object {
# 设置文件名,这里使用 .xlsx 格式
$fileName = "${fileNamePrefix}_$_.xlsx"
# 获取文件路径
$filePath = Join-Path -Path $PWD -ChildPath $fileName
# 创建 Excel 工作簿并保存
$excel = New-Object -ComObject Excel.Application
$workbook = $excel.Workbooks.Add()
$workbook.SaveAs($filePath)
$workbook.Close()
$excel.Quit()
<#
用来显式释放 Excel COM 对象的资源,以确保在脚本执行完成后,释放 Excel 进程和相关资源,
避免资源泄漏和占用问题。
使用 Out-Null 可以将输出结果丢弃,避免将释放对象的消息输出到控制台。
#>
[System.Runtime.Interopservices.Marshal]::ReleaseComObject($excel) | Out-Null
Write-Host "文件: ${fileName} ===> 创建完成!" # 输出已创建的文件名
}
二. 批量删除文件
⏹获取指定文件夹下的文件
Range("A:B").Clear: k = 1
:
:冒号在 VBA 中用来分隔两条语句,表示同时执行两个操作。
strFileName = Dir
- 获取下一个文件的文件名,通过这个操作,实现了遍历文件夹中的所有文件。
Sub GetFiles()
Dim strPath As String
Dim strFileName As String, k As Long
With Application.FileDialog(msoFileDialogFolderPicker)
' 获取用户选择的文件夹的路径,如果未选取,则退出程序
If .Show Then
strPath = .SelectedItems(1)
Else
Exit Sub
End If
End With
Application.ScreenUpdating = False
If Right(strPath, 1) <> "\" Then
strPath = strPath & "\"
End If
' 清除A:B列的所有数据
Range("A:B").Clear: k = 1
' 向A1,B1列填入数据
Cells(1, 1) = "旧文件名": Cells(1, 2) = "是否删除"
' 获取指定路径下的文件(通配符获取首个文件名)
strFileName = Dir(strPath & "*.xls*")
Do While strFileName <> ""
k = k + 1
Cells(k, 1) = strPath & strFileName
' 第2次调用Dir函数,未使用任何参数,则获取同目录下的下一个文件名
strFileName = Dir
Loop
Application.DisplayAlerts = True
End Sub
⏹删除文件
Set dataRange = Range("A1").CurrentRegion
- 用于获取指定单元格的当前区域的语法。
- 返回一个表示当前区域的 Range 对象,该区域是从指定单元格开始向右和向下延伸到包含数据的边界。
- 在此案例中,数据结构如下
[ ["旧文件名", "是否删除"], ["文件路径1", "删除"], ["文件路径2", "删除"] ...... ]
Dir(dataRange(i, 1)) <> ""
- Dir 是一个 VBA 中用于操作文件系统的函数。
- 主要用于检查文件或目录是否存在,以及获取目录中的文件和子目录列表。
Kill dataRange(i, 1)
:VBA 中用于删除文件或目录的语句。它可以用来删除指定路径下的文件或目录。
Sub DeleteFile()
Dim dataRange As Range
Dim i As Long
' 数据装入数组
Set dataRange = Range("A1").CurrentRegion
' 标题行不要,从数组第二行开始遍历
For i = 2 To dataRange.Rows.Count
' 如果第2列为删除,并且要删除的文件存在的话,才会执行删除命令
If dataRange(i, 2) = "删除" And Dir(dataRange(i, 1)) <> "" Then
' Kill语句删除指定文件
Kill dataRange(i, 1)
End If
Next
MsgBox "批量删除完成!"
End Sub