PowerShell脚本为Excel错误代码

我正试图将具有几个工作表的Excel .xls文件转换成与.svs与Powershell 4.0。 我知道每个循环的SaveAs不是正确的,并且错误指向了第17行和第9个字符,我只是不知道如何解决它或如何解释错误代码0x800A03EC。

这是脚本:

Function ExportWSToCSV ($inputWorkbookPath, $outputFilePrefix, $outputDirectory) { #Start Excel invisibly without pop-up alerts. $inputWorkbookPath = "R:\Unclaimed Property\NC State\Jun 2015\" + ` "NC_RAW_JUL1986thruMAR2013" + ".xls" $excel = New-Object -ComObject Excel.Application $excel.Visible = $false $excel.DisplayAlerts = $false #Open Excel file. $workBook = $excel.Workbooks.Open($inputWorkbookPath) foreach ($workSheet in $workBook.Worksheets) { $n = $inputWorkbookPath + "_" + $workSheet.Name $workSheet.SaveAs($outputDirectory + $n + ".csv", 6) } $excel.Quit() } ExportWSToCSV -inputWorkbookPath "R:\Unclaimed Property\NC State\Jun 2015\NC_RAW_JUL1986thruMAR2013.xls" ` -outputFilePrefix "output_" ` -outputDirectory "R:\Unclaimed Property\NC State\Jun 2015\" 

这是错误:

 Exception calling "SaveAs" with "2" argument(s): "Exception from HRESULT: 0x800A03EC" At \\ncdfs1\documents$\ANDREWN\My Documents\PSscript_for_NC.ps1:17 char:9 + $workSheet.SaveAs($outputDirectory + $n + ".csv", 6) + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + CategoryInfo : NotSpecified: (:) [], MethodInvocationException + FullyQualifiedErrorId : ComMethodTargetInvocation 

我强烈地感觉到你的问题来自你的path连接逻辑。 让我们看看你的循环中的以下代码。

 $n = $inputWorkbookPath + "_" + $workSheet.Name $workSheet.SaveAs($outputDirectory + $n + ".csv", 6) 

在你的例子中调用你的variables,我认为是映射如下:

 $inputWorkbookPath equals "R:\Unclaimed Property\NC State\Jun 2015\NC_RAW_JUL1986thruMAR2013.xls" $workSheet.Name equals "Bagel" # I made that up. $outputDirectory equals "R:\Unclaimed Property\NC State\Jun 2015\" 

所以你要尝试设置新的文件名为:

R:\ Unclaimed Property \ NC State \ Jun 2015 \ R:\ Unclaimed Property \ NC State \ Jun 2015 \ NC_RAW_JUL1986thruMAR2013.xls_Bagel.csv

这看起来不正确。 如果你刚刚在你的循环中有线

 $outputDirectory + $n + ".csv" 

我想你会看到这个问题。 只是一些简单的debugging。

让我们解决这个问题

第一个猜测是你只需要改变它就像这样

 $path = $outputDirectory + $workSheet.Name + ".csv" $workSheet.SaveAs($path, 6) 

在这个问题的范围之外,在保存之前检查path是否存在是一个好主意。 这将节省一些潜在的头痛。