【问题标题】:Powershell COM Excel visible not workingPowershell COM Excel 可见不工作
【发布时间】:2021-01-06 03:29:06
【问题描述】:

我编写了一个简短的 Powershell 脚本来复制一些 Excel 数据。该脚本运行良好,但每次运行它都会打开 Excel,即使可见属性设置为 $false。任何人有任何想法为什么?我已经搜索了答案,但找不到任何解决方案。我还显示了该属性并且设置正确。

打开工作簿时会打开 Excel。

谢谢,

克里斯·J。

代码:

## function to close all com objects
function Release-Ref ($ref{
([System.Runtime.InteropServices.Marshal]::ReleaseComObject([System.__ComObject]$ref)   -gt 0)
[System.GC]::Collect()
[System.GC]::WaitForPendingFinalizers()
}
#Read-Host -Prompt "Press Enter to exit"
#####################################################################
## Load excel com objects attach to file
#####################################################################
$ExcelPath = 'C:\Chris_Test.xls'
$Excel = New-Object -ComObject Excel.Application
$Excel.Visible = $False
write-host "Visible 1"
write-host $Excel.Visible
$ExcelWorkBook = $Excel.Workbooks.Open($ExcelPath)
$Excel.Visible = $False
write-host "Visible 2"
write-host $Excel.Visible
$ExcelWorkSheet = $Excel.WorkSheets.item("Sheet1")
$Excel.Visible = $False
write-host "Visible 3"
write-host $Excel.Visible
$row = 2
$South_HX_Avg = "This"
$Middle_HX_Avg = " is a "
$North_HX_Avg = "test."
##
## Cells.Item(Row,Column)
#$ExcelWorkSheet.Cells.Item($row,1).Value2 = $South_HX_Avg
#$ExcelWorkSheet.Cells.Item(2,2).Value2 = $Middle_HX_Avg
#$ExcelWorkSheet.Cells.Item(2,3).Value2 = $North_HX_Avg
#####################################################################
# Close connections to Excel
# set interactive to false so no save buttons are shown
#####################################################################
$Excel.DisplayAlerts = $false
$Excel.ScreenUpdating = $false
$Excel.Visible = $False
write-host "Visible 4"
write-host $Excel.Visible
$Excel.Visible = $false
$Excel.Visible = $False
write-host "Visible 5"
write-host $Excel.Visible
$Excel.UserControl = $false
$Excel.Interactive = $false
## save the workbook
$ExcelWorkBook.Save()
## quit the workbook
$Excel.Quit()
## close all object references
Release-Ref($ExcelWorkSheet)
Release-Ref($ExcelWorkBook)
Release-Ref($Excel)
# Move-Item c:\scripts\test.zip c:\test -force
Read-Host -Prompt "Press Enter to exit"

【问题讨论】:

  • 您是否尝试过重新启动,只是为了确保您没有卡在内存中的东西导致这样做?该代码看起来应该做你想做的事。
  • Release-Ref 函数解析不正确,我认为您缺少右括号或大括号..

标签: excel powershell com visible


【解决方案1】:

当我取消注释第 30,31 和 32 行时,它工作正常,但我必须注释掉您对 Release-Ref(包括定义)的调用,以便它解析。

此外,当您使用以下方法创建新的 Excel 对象时:

$Excel = New-Object -ComObject Excel.Application

窗口的可见性在对象的构造函数中默认设置为false,因此无需显式设置...

【讨论】:

    【解决方案2】:

    是的,我确实尝试过重新启动,并在另一台计算机上尝试过,结果相同。很好,Steve Rathbone,我的程序缺少括号。在我修复它之后,它仍然会打开 Excel。

    我还尝试用相同的结果注释掉对 Release-Ref 的调用。

    【讨论】:

      【解决方案3】:

      我在最近使用的脚本中做了类似的事情。 MS Com 对象在多个地方有大量选项。

      这对我有用。

      $xlsFile = "\\your\file.xls"
      $Excel = New-Object -ComObject Excel.Application
      $excel.DisplayAlerts = $false;
      $excel.AskToUpdateLinks = $false;
      $Workbook = $Excel.Workbooks.Open($xlsFile, 0, 0, 5, "password")
      #do some stuff in excel
      $Excel.Quit()
      

      PS,你也可以使用workbooks.open()函数设置一些参数。

      这里只是一些: Workbooks.Open(文件名、UpdateLinks、只读、格式、密码)

      您可以在此处阅读有关 com 对象参数的更多信息: https://docs.microsoft.com/en-us/office/vba/api/excel.workbooks.open

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-07-28
        • 2021-12-22
        • 1970-01-01
        • 1970-01-01
        • 2015-03-21
        相关资源
        最近更新 更多