PowerShellでExcel操作した時に残るプロセスについて

| 2008年10月17日金曜日
PowerShellでExcelを操作するとプロセスが残ってしまっていました。
ComObjectなので最後までちゃんと面倒見てあげてなかったのが原因です。

Excel Cook Book in Windows PowerShellにちゃんと廃棄してあげるようにRelease-Refが紹介されていました。

$excel.Quit() した後に、この関数に今まで参照していた$excel、$workBooks、$workSheet、$rengeなどを渡してあげると、無事逝ってくれます。

これを知るまで、Stop-Prosess -Name "EXCEL"で皆殺しにしていたので・・・
これで、すっきりしました。

PowerShellでExcelの値を取得してXMLにしてみる

| 2008年10月5日日曜日

foo.xlsが右の見たいなのとして
 









foo.ps1 > foo.xml
<?xml version="1.0" encoding="utf-8"?>
<excel>
  <data>
    <date>2008/1/1</date>
    <foo>1</foo>
    <bar>12</bar>
    <baz>100</baz>
  </data>
  ・
  ・
  ・
</excel>
見たいにしてみる。

--- foo.ps1 ---

  1. $filePath = Get-ChildItem foo.xls*  
  2. $excel = New-Object -comobject Excel.Application  
  3. $workBooks = $excel.Workbooks.Open($filePath)  
  4. #Sheet1を取得する  
  5. $workbooks.Worksheets | % { if ($_.Index -eq 1) { $sheet = $_; }}  
  6. @" 
  7. <?xml version="1.0" encoding="utf-8"?> 
  8. <excel> 
  9. "@  
  10.   
  11. foreach($i in 2..13) {  
  12.  $d = $sheet.Cells.Item($i,1).Text;  
  13.  $foo = $sheet.Cells.Item($i,2).Text;  
  14.  $bar = $sheet.Cells.Item($i,3).Text;  
  15.  $baz = $sheet.Cells.Item($i,4).Text;  
  16. @" 
  17.   <data> 
  18.     <date>$d</date> 
  19.     <foo>$foo</foo> 
  20.     <bar>$bar</bar> 
  21.     <baz>$baz</baz> 
  22.   </data> 
  23. "@  
  24.   
  25. }  
  26. @" 
  27. </excel> 
  28. "@  
  29.   
  30. $workBooks.Close()  
  31. $excel.Quit()  

PowerShellでExcel操作

|
foo.xlsがスプリクトと同じフォルダにあるとして・・・

--- foo.ps1 ---

  1. $filePath = Get-ChildItem foo.xls*  
  2. $excel = New-Object -comobject Excel.Application  
  3. $excel.Visible = $True  
  4. $workBooks = $excel.Workbooks.Open($filePath)  
  5.   
  6. #Sheet1を取得する  
  7. $workbooks.Worksheets | % { if ($_.Index -eq 1) { $sheet = $_; }}  
  8.   
  9. #A1の値が表示される  
  10. $sheet.Cells.Item(1,1).Text  
  11.   
  12. #文字のColorIndexが表示される  
  13. $sheet.Cells.Item(1,1).Font.ColorIndex  
  14.   
  15. #セルのColorIndexが表示される  
  16. $sheet.Cells.Item(1,1).Interior.ColorIndex  
  17.   
  18. $workBooks.Close()  
  19. $excel.Quit()