PowerShell ile excel otomasyonu

Daha önce yaptığımız internet explorer otomasyonunda olduğu gibi, benzer bir şekilde excel otomasyonu yapmaya başlıyoruz. Powergui programını açıp, yeni diyelim (Ctrl+N). Aşağıdaki satırları yazalım:

$objExcel = new-object -comobject excel.application 

$objExcel.Visible = $True

Bu satırları yazdığımızda, hızlı bir şekilde excelin açıldığını göreceğiz; şimdilik elle exceli kapatalım. Hatta görev yöneticisinden exceli kapatmak en doğrusu; kapatmadığımızda excel otomasyonumuzda (powergui ile çalışırken) bazı arızalar ortaya çıkacaktır, bu yüzden en iyisi görev yöneticisinden kapatmak. Bunu otomatik hale getirmenin yolunu daha sonra ele alacağız.

Önce ‘Test-Path’ cmdlet’i ile dosyamızın olup, olmadığına bakıyoruz. Yoksa oluşturuyoruz, varsa var olan dosyayı güncellemek üzere açıyoruz, workbook objesi create ediyoruz. Daha sonra worksheet objesi üzerinden cells objesine erişiyoruz.

$excelFilePath = “C:\test.xlsx”

if (Test-Path $excelFilePath) {

      $workbook = $objExcel.Workbooks.Open($excelFilePath)

  } else {

      $workbook = $objExcel.Workbooks.Add()

      $workbook.SaveAs($excelFilePath)

}

$workbook = $objExcel.Workbooks.Add()

$worksheet = $workbook.Worksheets.Item(1)

$cells=$worksheet.Cells

Artık $cells değişkenini kullanarak excel’e istediğimiz herşeyi yazdırabiliriz.

$cells.item(1,1) = “Başlık”

$workbook.Save()

$workbook.Close()

$objExcel.Quit()

komutlarını çalıştırıyoruz. Excel kapandı. Herşey çok güzel, fakat görev yöneticisinden baktığımız zaman excel instance’larının yok olmadığını, hala çalıştığını görüyoruz. Bu iyi bir şey değil. Program her çalıştığında yeni bir excel instance’ı yaratılıyor, program bittiğinde ise yok edilmiyor, dolayısıyla kullanılan hafıza şişiyor. Bunu engellemek için, [System.Runtime.Interopservices.Marshal]::ReleaseComObject metodunu kullanıyoruz.

[System.Runtime.Interopservices.Marshal]::ReleaseComObject($cells) 

[System.Runtime.Interopservices.Marshal]::ReleaseComObject($worksheet) 

[System.Runtime.Interopservices.Marshal]::ReleaseComObject($workbook) 

[System.Runtime.Interopservices.Marshal]::ReleaseComObject($objExcel) 

1 thought on “PowerShell ile excel otomasyonu”

  1. Geri bildirim: Yeni Başlayanlar İçin 7 Temel Excel Formülü (2019 Güncellemesiyle)

Yorum bırakın

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir

Scroll to Top