Excel 错误代码的 Powershell 脚本

Powershell script for Excel error code

我正在尝试使用 Powershell 4.0 将具有多个工作表的 Excel .xls 文件转换为 .csv。我知道 for each 循环中的 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

我强烈认为您的问题出在您的路径串联逻辑上。让我们从您的循环中查看以下代码。

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

在你的例子中调用你的变量我认为映射如下:

$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:\无人认领Property\NCState\Jun2015\R:\无人认领Property\NCState\Jun2015\NC_RAW_JUL1986thruMAR2013.xls_Bagel.csv

这看起来一点都不对。如果你的循环中只有一行

$outputDirectory + $n + ".csv"

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

让我们解决这个问题

第一个猜测是,您只需要将其更改为 这样的内容

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

在这个问题的范围之外,在保存之前 check if that path exists 是个好主意。它会避免一些潜在的头痛。