方法调用失败,因为 [System.__ComObject] 在 Powershell v4.0 中不包含名为 'Close' 的方法
Method invocation failed because [System.__ComObject] does not contain a method named 'Close' in Powershell v4.0
这是我的第一个 Whosebug 问题,但我会尽量牢记社区标准..
我是 运行 Office 2013 on Win7 Pro 和 PoSh v4.0。执行后续脚本后,我收到以下错误:"Method invocation failed because [System.__ComObject] does not contain a method named 'Close'."
$xl = New-Object -comobject Excel.Application
$xl.Visible = $false
$xl.DisplayAlerts = $false
$filepath = "C:\Users\rysullivan\Desktop\Projects\EDCautomation\attach\"
$wb1 = $xl.Workbooks.Open((Join-Path $filepath "Ryan Sullivan-Template.xlsx"))
sleep 5
$wb1.Close()
[System.Runtime.Interopservices.Marshal]::ReleaseComObject($xl)
为了遵循呈现将重现错误的最短代码的标准,我从更大的自动化中开发了上面的代码
Powershell 4.0 and Excel 2013 | Bug | Work-a-round 似乎在同一点上。我按照XXInvidiaXX提供的thread/culture解决方案,产生了同样的错误。
Problems with Excel automation in PowerShell Roy 的回答指出了一个计时错误,但我插入了一个 Sleep 命令并分别尝试 运行 打开和关闭命令,但都无济于事。
非常感谢任何帮助,尤其是基础理论。
尽管 Workbook.Close()
are all optional, all the examples on MSDN 的参数至少提供了一个(SaveChanges 参数),但让我相信当您不这样做时 PowerShell 无法识别方法签名'提供任何参数。
你的运气可能更好:
$wb1.Close($false)
或
$wb1.Close($false,$null,$null)
替换为 $true
以保存您所做的任何更改
我倾向于在Excel进程级别($xl
)使用Quit()
的方法,而不是工作簿($wb1
) .
所以使用你的代码,它会被写成如下(使用 $xl.Quit()
而不是 $wb1.Close()
):
$xl = New-Object -comobject Excel.Application
$xl.Visible = $false
$xl.DisplayAlerts = $false
$filepath = "C:\Users\rysullivan\Desktop\Projects\EDCautomation\attach\"
$wb1 = $xl.Workbooks.Open((Join-Path $filepath "Ryan Sullivan-Template.xlsx"))
sleep 5
$xl.Quit()
[System.Runtime.Interopservices.Marshal]::ReleaseComObject($xl)
另外一定要运行它作为管理员。
这是我的第一个 Whosebug 问题,但我会尽量牢记社区标准..
我是 运行 Office 2013 on Win7 Pro 和 PoSh v4.0。执行后续脚本后,我收到以下错误:"Method invocation failed because [System.__ComObject] does not contain a method named 'Close'."
$xl = New-Object -comobject Excel.Application
$xl.Visible = $false
$xl.DisplayAlerts = $false
$filepath = "C:\Users\rysullivan\Desktop\Projects\EDCautomation\attach\"
$wb1 = $xl.Workbooks.Open((Join-Path $filepath "Ryan Sullivan-Template.xlsx"))
sleep 5
$wb1.Close()
[System.Runtime.Interopservices.Marshal]::ReleaseComObject($xl)
为了遵循呈现将重现错误的最短代码的标准,我从更大的自动化中开发了上面的代码
Powershell 4.0 and Excel 2013 | Bug | Work-a-round 似乎在同一点上。我按照XXInvidiaXX提供的thread/culture解决方案,产生了同样的错误。
Problems with Excel automation in PowerShell Roy 的回答指出了一个计时错误,但我插入了一个 Sleep 命令并分别尝试 运行 打开和关闭命令,但都无济于事。
非常感谢任何帮助,尤其是基础理论。
尽管 Workbook.Close()
are all optional, all the examples on MSDN 的参数至少提供了一个(SaveChanges 参数),但让我相信当您不这样做时 PowerShell 无法识别方法签名'提供任何参数。
你的运气可能更好:
$wb1.Close($false)
或
$wb1.Close($false,$null,$null)
替换为 $true
以保存您所做的任何更改
我倾向于在Excel进程级别($xl
)使用Quit()
的方法,而不是工作簿($wb1
) .
所以使用你的代码,它会被写成如下(使用 $xl.Quit()
而不是 $wb1.Close()
):
$xl = New-Object -comobject Excel.Application
$xl.Visible = $false
$xl.DisplayAlerts = $false
$filepath = "C:\Users\rysullivan\Desktop\Projects\EDCautomation\attach\"
$wb1 = $xl.Workbooks.Open((Join-Path $filepath "Ryan Sullivan-Template.xlsx"))
sleep 5
$xl.Quit()
[System.Runtime.Interopservices.Marshal]::ReleaseComObject($xl)
另外一定要运行它作为管理员。