2017-08-07 17 views
0

SQLインポートスクリプトの後にExcelを終了しようとしていますが、Interopservicesメソッドを使用してComオブジェクトを解放できません。Interopservicesを使用してExcelを閉じることができません

comオブジェクトを解放しようとすると、 [System.Runtime.Interopservices.Marshal]::ReleaseComObject(New-Object -Com Excel.Application) ブラケットがありませんというエラーが表示されます。 私はこのプロセスの多くの例を他の人々のコードで見直しました。何かが欠落しているに違いないが、それは私が行方不明にしているものであり、見つけ出すための援助が大好きです。

以下は私のスクリプトです。

$serverName = "SERVER"; 
$databaseName = "User_Data" ; 
$tableName = "TABLE" ; 
$filepath = "Path to Xls"; 

#create object to open Excel workbook 
$Excel = New-Object -ComObject Excel.Application 
$Workbook = $Excel.Workbooks.Open($filepath) 
$Worksheet = $Workbook.Worksheets.Item(1) 
$startRow = 2 

#create System.DataTable 
    $dt = new-object "System.Data.DataTable"         
    [void]$dt.Columns.Add("StaffStudentID", [System.Type]::GetType("System.String")) 
    [void]$dt.Columns.Add("SurName", [System.Type]::GetType("System.String")) 
    [void]$dt.Columns.Add("FirstName", [System.Type]::GetType("System.String")) 
    [void]$dt.Columns.Add("Year", [System.Type]::GetType("System.String")) 
    [void]$dt.Columns.Add("HomeGroup", [System.Type]::GetType("System.String")) 
    [void]$dt.Columns.Add("DOB", [System.Type]::GetType("System.String")) 
    [void]$dt.Columns.Add("StaffStudent", [System.Type]::GetType("System.String")) 
    [void]$dt.Columns.Add("email", [System.Type]::GetType("System.String")) 
    [void]$dt.Columns.Add("ImageName", [System.Type]::GetType("System.String")) 
    [void]$dt.Columns.Add("CardKey", [System.Type]::GetType("System.String")) 
    [void]$dt.Columns.Add("F11", [System.Type]::GetType("System.String")) 
    Do {      
     $ColValues1 = $Worksheet.Cells.Item($startRow, 2).Value() 
     $ColValues2 = $Worksheet.Cells.Item($startRow, 3).Value() 
     $ColValues3 = $Worksheet.Cells.Item($startRow, 4).Value() 
     $ColValues4 = $Worksheet.Cells.Item($startRow, 5).Value() 
     $ColValues5 = $Worksheet.Cells.Item($startRow, 6).Value() 
     $ColValues6 = $Worksheet.Cells.Item($startRow, 7).Value() 
     $ColValues7 = $Worksheet.Cells.Item($startRow, 8).Value() 
     $ColValues8 = $Worksheet.Cells.Item($startRow, 9).Value() 
     $ColValues9 = $Worksheet.Cells.Item($startRow, 10).Value() 
     $ColValues10 = $Worksheet.Cells.Item($startRow, 11).Value() 
     $ColValues11 = $Worksheet.Cells.Item($startRow, 12).Value() 
     $startRow++ 
     $dt.Rows.Add($ColValues1,$ColValues2,$ColValues3,$ColValues4,$ColValues5,$ColValues6,$ColValues7,$ColValues8,$ColValues9,$ColValues10,$ColValues11) 
     } 
    While ($Worksheet.Cells.Item($startRow,2).Value() -ne $null) 

$Excel.Quit() 

#connect to SQL Server and import the system.data.table 
$SQLServerConnection = "Data Source=$serverName;Integrated Security=true;Initial Catalog=$databaseName;" 
$bulkCopy = new-object ("Data.SqlClient.SqlBulkCopy") $SQLServerConnection 
$bulkCopy.DestinationTableName = $tableName 
$bulkCopy.WriteToServer($dt) 


#Remove Veriables and com object 
[System.Runtime.Interopservices.Marshal]::ReleaseComObject($Excel) 
Remove-Variable serverName 
Remove-Variable databaseName 
Remove-Variable tableName 
Remove-Variable filepath 
Remove-Variable excel 
Remove-Variable workbook 
Remove-Variable worksheet 
Remove-Variable startRow 
Remove-Variable dt 
Remove-Variable bulkCopy 
Remove-Variable sqlserverconnection 

は)

Wofen

答えて

0

、ありがとうあなたが(前に終了して変更を保存する必要がありますか? このパターンは私にとっては役に立ちます。

Powershell: Excel, save and close after run

+0

は、それがスケジュールされたタスクを経由して実行されている場合、実際にExcelのプロセスを閉じることをしていますか? 私はそれを実行すると、私はエクセルプロセスを実行して終了します。 –

+0

しかし、いいえ、データをSQLにインポートするときに、そのデータを保存する必要はありません。 –

関連する問題