2014-08-29 5 views
1

J'ai écrit un court script Powershell pour copier certaines données Excel. Le script fonctionne correctement, mais il ouvre Excel chaque fois que je l'exécute, même si la propriété visible est définie sur $ false. Quelqu'un a des idées pourquoi? J'ai cherché des réponses, mais je ne trouve aucune solution. J'ai également affiché la propriété et elle est définie correctement.Powershell COM Excel visible ne fonctionne pas

Excel s'ouvre lorsque le classeur est ouvert.

Merci,

Chris J.

code:

## 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" 
+0

Avez-vous essayé de redémarrer, juste pour vous assurer que vous n'avez pas quelque chose coincé dans la mémoire qui fait cela? Ce code semble devoir faire ce que vous voulez. – TheMadTechnician

+0

La fonction Release-Ref n'analyse pas correctement, je pense qu'il vous manque une parenthèse fermante. –

Répondre

0

Quand je décommenté les lignes 30,31 et 32, il marchait bien, mais je devais commenter vos appels vers Release-Ref (y compris la définition) pour analyser.

Aussi, lorsque vous créez un nouvel objet Excel à l'aide:

$Excel = New-Object -ComObject Excel.Application 

la visibilité de la fenêtre est définie par défaut false dans le constructeur de l'objet, il n'y a donc pas besoin de définir explicitement ..

0

Oui, j'ai essayé de redémarrer et j'ai également essayé sur un autre ordinateur avec les mêmes résultats. Bonne capture Steve Rathbone, ma procédure manquait une parenthèse. Après l'avoir réparé, il ouvre toujours Excel.

J'ai également essayé de commenter les appels à Release-Ref avec les mêmes résultats.

Questions connexes