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 是个好主意。它会避免一些潜在的头痛。
我正在尝试使用 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 是个好主意。它会避免一些潜在的头痛。