使用PowerShell将CSV转换为XLSX时遇文件损坏问题求助
解决PowerShell转CSV为XLSX时文件损坏的问题
问题出在这几个关键点上,对应修改即可解决:
- 保存格式参数错误:你用的
1是XLS格式的枚举值,要生成XLSX格式必须用51(对应Open XML工作簿格式) - 中文引号异常:代码里的中文双引号(“”)会导致PowerShell解析出错,全部替换为英文双引号("")
- 变量笔误:
$Worksheets = $Workbooks.worksheets里的$Workbooks是拼写错误,应该是$Workbook(单数,因为当前只打开了一个工作簿) - 建议清理COM对象:避免Excel进程在后台残留占用资源
修正后的完整代码:
$xl = New-Object -ComObject Excel.Application $xl.Visible = $true $Workbook = $xl.Workbooks.Open("c:\sdk\AdEmployeeNumber.csv") # 修正变量名笔误 $Worksheets = $Workbook.Worksheets # 使用51作为XLSX格式参数,文件名用英文双引号 $Workbook.SaveAs("c:\sdk\AdEmployeeNumber.xlsx", 51) $Workbook.Saved = $true $xl.Quit() # 清理COM对象,防止Excel进程残留 [System.Runtime.Interopservices.Marshal]::ReleaseComObject($Worksheets) | Out-Null [System.Runtime.Interopservices.Marshal]::ReleaseComObject($Workbook) | Out-Null [System.Runtime.Interopservices.Marshal]::ReleaseComObject($xl) | Out-Null Remove-Variable xl, Workbook, Worksheets
补充说明:
- Excel的SaveAs格式枚举值常用的有:51=XLSX、52=XLSM、56=XLS
- 如果不需要显示Excel界面,可以把
$xl.Visible = $true改为$false,后台执行更高效
内容的提问来源于stack exchange,提问作者lakeek
相关产品推荐
相关产品推荐

