将同一工作簿多Excel工作表转为同名独立PDF的PowerShell脚本
PowerShell脚本:将Excel工作簿的多个工作表导出为独立PDF文件
要实现把Excel工作簿里的每个工作表单独导出为以工作表名称命名的PDF文件,你提供的原脚本是将整个工作簿导出成单个PDF,不符合需求。以下是修正后的完整脚本:
# 设置目标路径,替换为你的Excel文件所在路径 $path = "I:\" $xlFixedFormat = "Microsoft.Office.Interop.Excel.xlFixedFormatType" -as [type] # 获取路径下所有Excel文件(包括子目录) $excelFiles = Get-ChildItem -Path $path -Include *.xls, *.xlsx -Recurse # 创建Excel COM对象 $objExcel = New-Object -ComObject Excel.Application $objExcel.Visible = $false foreach ($wb in $excelFiles) { # 打开工作簿,只读模式 $workbook = $objExcel.Workbooks.Open($wb.FullName, 3) # 获取工作簿所在目录,用于保存PDF $outputDir = $wb.DirectoryName # 遍历工作簿中的每个工作表 foreach ($worksheet in $workbook.Worksheets) { # 生成PDF文件名:工作簿名_工作表名.pdf $pdfFileName = "$($workbook.BaseName)_$($worksheet.Name).pdf" $pdfPath = Join-Path -Path $outputDir -ChildPath $pdfFileName Write-Host "正在导出: $pdfPath" # 导出当前工作表为PDF $worksheet.ExportAsFixedFormat($xlFixedFormat::xlTypePDF, $pdfPath) } # 关闭工作簿,不保存更改 $workbook.Close($false) } # 退出Excel并清理COM对象 $objExcel.Quit() [System.Runtime.Interopservices.Marshal]::ReleaseComObject($objExcel) | Out-Null Remove-Variable objExcel
关键说明:
- 脚本会遍历指定路径下所有Excel文件,包括子目录中的文件
- 每个工作表导出的PDF命名规则为
[工作簿名称]_[工作表名称].pdf,可根据需求自行调整 - 使用只读模式打开工作簿,避免修改原文件
- 最后添加了COM对象的清理步骤,防止Excel进程残留
内容的提问来源于stack exchange,提问作者Zach
相关产品推荐
相关产品推荐

