Devo aprire il file excel con il parametro CorruptLoad
da PowerShell. Ma quando provo a farlo, ottengo un errore Exception calling "Open" with "15" argument(s): "open method workbooks class failed"
. Questo errore si verifica solo quando chiamo Open
con tutti e 15 gli argomenti. E quando provo ad aprire lo stesso file excel con il programma VB.net
con 15 argomenti o con il valore di specifica dell'argomento con nome CorruptLoad
, non ci sono problemi!Errore durante l'apertura di Excel in PowerShell
Sto usando powershell v 4.0
, Office 2010 con SP2 e .NET Framework 4.5.2
.
Ecco il mio codice powershell
:
$excel = New-Object -ComObject Excel.Application
$excel.Visible = $false
try
{
$missing = [System.Type]::Missing
# $wb = $excel.Workbooks.Open("d:\temp\start_instrument.xls", $missing, $missing, $missing, $missing,
# $missing, $missing, $missing, $missing, $missing,
# $missing, $missing, $missing, $missing, $missing)
# $wb = $excel.Workbooks.Open("d:\temp\start_instrument.xls", $missing, $missing, $missing, $missing,
# $missing, $missing, $missing, $missing, $missing,
# $missing, $missing, $missing, $missing, 1)
$XlCorruptLoad = "Microsoft.Office.Interop.Excel.XlCorruptLoad" -as [type]
$wb = $excel.Workbooks.Open("d:\temp\start_instrument.xls", $missing, $missing, $missing, $missing,
$missing, $missing, $missing, $missing, $missing,
$missing, $missing, $missing, $missing, $XlCorruptLoad::xlRepairFile)
}
catch
{
Write $Error[0].ToString()
}
# some stuff
if ($excel -ne $null)
{
$excel.Quit()
[System.Runtime.InteropServices.Marshal]::ReleaseComObject($excel) | Out-Null
$excel = $null
}
[System.GC]::Collect() | Out-Null
[System.GC]::WaitForPendingFinalizers() | Out-Null
non ho idea del perché si verifica un errore. Sarò lieto di eventuali consigli e ipotesi!
Se avete bisogno di usare 'CorruptLoad' Perché non avete specificato nella lista degli argomenti? Lo hai come "$ mancante"? https://msdn.microsoft.com/en-us/library/office/ff193596.aspx. – Matt
@Matt, ho provato tutte le varianti di chiamata alla funzione 'Open'. Ho cambiato il mio codice di esempio per mostrarlo. – Indian
Grazie per il chiarimento. – Matt