使用以下代码转换指定目录中的所有excel文件。当我尝试将一个文件转换为csv时,它按预期工作,但是当我尝试将所有excel文件转换为csv时,没有任何异常抛出,并且文件未被转换。
$path = get-childitem -path "\\sharedrive\excelfiles\" -filter *.xlsx
foreach ($file in $path)
{
$Excelfilename = $file.fullname
$CSVfilename = "" + $file.Basename
$xlCSV=6
$Excel = New-Object -comobject Excel.Application
$Excel.Visible = $False
$Excel.displayalerts=$False
$Workbook = $Excel.Workbooks.Open($ExcelFileName)
$Workbook.SaveAs($CSVfilename,$xlCSV)
$Excel.Quit()
}
答案 0 :(得分:0)
之前我遇到过同样的问题,这篇Technet文章非常有用:https://technet.microsoft.com/en-us/library/ff730962.aspx
基本上你做的一切都是正确的,但.Quit()方法并不是你想要的,因为它摆脱了程序而不是com对象。我们需要进一步调用.NET Framework来释放COM对象,然后释放$ Excel变量。
$Excel.Quit()
[System.Runtime.Interopservices.Marshal]::ReleaseComObject($Excel)
Remove-Variable $Excel
这应该可以为您提供所需的内容并适当地清理您的环境,让您循环回来并对所有.csv进行更改