Excel Makro İle Web Form Doldurma
Bazı durumlarda internette bulunan bir formun manuel olarak tek tek doldurmak yerine otomatik doldurmak gerekebilir. Böylece Excel de bulunan yüzlerce binlerce satır veriyi bir web uygulamasına doldurabiliriz. Web de bulunan bir sayfayı doldurmak için Powershell kullanılabilir. Bir web formunu doldurmanın en çok tercih edilen ve kolay yolu ise Excel de makro hazırlamaktır. Bunun için öncelikle doldurulacak form için gerekli veriler Excelde bir sayfada hazırlanır. Daha sonra Excel de herhangi bir sayfa (sheet) üzerinde farenin sağ tuşuna basılır ve kod görüntüle seçilir. Karşımıza Excel içinde Visual Basic komutları yazacağımız Microsoft Visual Basic for Applications sayfası gelir. Insert içinden Module menüsü ile bir modül ekleyebiliriz. Böylece kodlama yapabileceğimiz bir modül açılır. Öncelikle Tools içinde bulunan References menüsünden Microsoft HTML Object Library ve Microsoft Internet Controls referans dosyaları projeye dahil edilmesi gerekir.
Eklenen referans ve kodlardada anlaşıldığı gibi Internet Explorer üzerinde ilgili web sayfası açılacak ve kodlar çalışacaktır. Html veya web sayfasında bulunan formdaki metin kutuları (input), açılan kutular (select), radyo butonlarının (option) id leri Visual Basic kodları ile yakalanarak ilgili Excel hücresi içeriği doldurulmuştur. Ayrıca Excelde bulunan dolu satırlar sayılarak elde edilen satır sayısı kadar Agi.htlm formuna çocuk alanı eklenmiş ve for each döngüsü ile bütün input nesnelerinde dolaşılarak AGİ formunun doldurulması sağlanmıştır.
Makro içeren sözkonusu Excel dosyası farklı kaydet ile Makro İçerebilen Excel Çalışma Kitabı xlsm olarak kayıt edilmesi gerekmektedir. Makro ve içerik bulunan örnek Excel dosyası aşağıda linkte verilmiştir.
AGİ Aktarma Excel Makro Dosyası Linki
Excelden Web form veya html dolduran kod
Sub CmdAgiDoldur()
Call HtmlDoldur
End Sub
Private Sub HtmlDoldur()
Dim i As Long
Dim n As Integer
Dim IE As Object
Dim doc As HTMLDocument
Dim inputfield As HTMLInputElement
Set IE = CreateObject("InternetExplorer.Application")
IE.Visible = True
IE.Navigate "http://www.metinselvi.com/files/agi.html"
Application.StatusBar = "www.metinselvi.com yükleniyor. Lütfen bekleyin..."
Do While IE.Busy
Application.Wait DateAdd("s", 1, Now)
Loop
Set doc = IE.document
i = WorksheetFunction.CountA(Columns("A:A")) - 1
Do While i > 2
doc.getElementById("btnPlus").Click
i = i - 1
Loop
doc.getElementById("TCKN").Value = Range("Data!A2").Value
doc.getElementById("Sicil").Value = Range("Data!B2").Value
doc.getElementById("AdiSoyadi").Value = Range("Data!C2").Value
doc.getElementById("Gorevi").Value = Range("Data!D2").Value
If Range("Data!E2").Value = "Bekar" Then
doc.getElementById("cbxBekar").Click
ElseIf Range("Data!E2").Value = "Evli" Then
doc.getElementById("cbxEvli").Click
ElseIf Range("Data!E2").Value = "Diğer" Then
doc.getElementById("cbxDiger").Click
End If
doc.getElementById("EsAdSoyad").Value = Range("Data!F2").Value
If Range("Data!G2").Value = "Çalışıyor" Then
doc.getElementById("cbxCalisiyor").Click
ElseIf Range("Data!G2").Value = "Çalışmıyor" Then
doc.getElementById("cbxCalismiyor").Click
ElseIf Range("Data!G2").Value = "Geliri Olan" Then
doc.getElementById("cbxGeliriVar").Click
ElseIf Range("Data!G2").Value = "Geliri Olmayan" Then
doc.getElementById("cbxGeliriYok").Click
End If
doc.getElementById("EsGelirAciklama").Value = Range("Data!H2").Value
i = 2
For Each inputfield In IE.document.getElementsByTagName("input")
If inputfield.ID = doc.getElementById("CocukAdSoyad").ID Then
inputfield.Value = Cells(i, 9).Value
ElseIf inputfield.ID = doc.getElementById("CocukTCKN").ID Then
inputfield.Value = Cells(i, 10).Value
ElseIf inputfield.ID = doc.getElementById("DogumTarih").ID Then
inputfield.Value = Format(Cells(i, 11).Value, "dd.mm.yyyy")
ElseIf inputfield.ID = doc.getElementById("BabaAd").ID Then
inputfield.Value = Cells(i, 13).Value
ElseIf inputfield.ID = doc.getElementById("AnneAd").ID Then
inputfield.Value = Cells(i, 14).Value
ElseIf inputfield.ID = doc.getElementById("Torun").ID Then
inputfield.Value = Cells(i, 15).Value
ElseIf inputfield.ID = doc.getElementById("KayitTarih").ID Then
inputfield.Value = Format(Cells(i, 16).Value, "dd.mm.yyyy")
ElseIf inputfield.ID = doc.getElementById("OkulAd").ID Then
inputfield.Value = Cells(i, 17).Value
ElseIf inputfield.ID = doc.getElementById("Sinif").ID Then
inputfield.Value = Cells(i, 18).Value
ElseIf inputfield.ID = doc.getElementById("Aciklama").ID Then
inputfield.Value = Cells(i, 19).Value
i = i + 1
End If
Next
i = 2
For Each inputfield In IE.document.getElementsByTagName("select")
If inputfield.ID = doc.getElementById("Cinsiyet").ID Then
If Cells(i, 12).Value = "Kadın" Then
n = 1
ElseIf Cells(i, 12).Value = "Erkek" Then
n = 2
End If
inputfield.selectedIndex = n
i = i + 1
n = 0
End If
Next
doc.getElementById("dAdsoyad").Value = Range("Data!T2").Value
doc.getElementById("dTarih").Value = Format(Range("Data!U2").Value, "dd.mm.yyyy")
Set IE = Nothing
Application.StatusBar = ""
End Sub