SQL Server Integration Services ile Excel Hücrelerini Okuma

ETL ile uğraşan herkes bir şekilde SSIS ile Excelden veri okumuştur. Herhâlde en rahat ve kolay şekilde yapılan okuma türü de budur. Peki ya verimiz excelde düz bir liste şeklinde değil de farklı hücrelerde dağınık bir şekilde bulunuyorsa o zaman ne yapmamız gerekiyor? Hep birlikte bunu inceleyeceğiz şimdi.

Elimizdeki örnek excel modeli aşağıdaki şekildeki gibi olsun.excel1

Gördüğümüz gibi exceldeki veriler satır formatında değil kolon formatında bulunuyor. Ad bilgisini okuyabilmek için B3, pozisyon bilgisini okuyabilmek için H5 hücrelerini okumamız gerekiyor. Normal SSIS aktarımlarını bu örneğimiz gibi durumlarda kullanamıyoruz.

Şimdi bu exceldeki hücreleri tek tek okuyarak SQL Server’daki bir tabloya SSIS yardımıyla yazmaya başlayalım. Bu işlem için SSIS deki Script Component taskını kullanacağız.

Script tipi olarak source seçiyoruz ve çıktı olarak vereceğimiz tüm alanlarımızı tek tek tanımlıyoruz. Tüm çıktı alanları için doğru data tiplerinde tanımlama yapmamız çok önemli.

 excel3

Tanımlamalardan sonra Edit script diyerek gereken kodu yazmaya başlıyoruz. Ben burada yazacağım kod olarak Vb.Net tercih ettim, C# ile de yazılabilir.

Excelden okuma yapacağımız için öncelikle excel referansını ekliyoruz.

 excel4

Kodun en üstündeki Imports alanına Imports Microsoft.Office.Interop.Excel tanımlamasını yapıyor ve CreateNewOutputRows() içine aşağıdaki kodu yazıyoruz.

Public Overrides Sub CreateNewOutputRows()
Dim oExcel As Object = CreateObject(“Excel.Application”)
Dim FileName As String
FileName = “C:\Users\socak\Desktop\test.xls”
Dim oBook As Object = oExcel.Workbooks.Open(FileName)
Dim oSheet As Object = oBook.Worksheets(1)
Output0Buffer.AddRow()
Output0Buffer.Ad = oSheet.Range(“B3”).Value
Output0Buffer.Soyad = oSheet.Range(“B4”).Value
Output0Buffer.İl = oSheet.Range(“B5”).Value
Output0Buffer.İlçe = oSheet.Range(“E4”).Value
Output0Buffer.Firma = oSheet.Range(“E5”).Value
Output0Buffer.Pozisyon = oSheet.Range(“H5”).Value
End Sub

Paketimizi çalıştırdıktan sonra SQL Server daki tablomuza kayıtların geldiğini görebiliyoruz.

excel5

Exceldeki her bir hücrenin tek tek kodun içinde yazılıyor olması biraz can sıkıcı olabilir ama hücrelerdeki değerler sabit kabul edilirse oldukça kolay bir yöntem olarak kullanabiliriz.