|
|
|
 |
|
|
 |
 |
Excel Verisini Metin Dosyasına Aktarmak
- Salih Koca -
25.10.2004 |
|
|
|
|
 |
Bazen Excelde bulunan verilerimizi metin dosyalarına aktararak farklı veritabanlarına yüklenmek üzere hazırlamamamız gerekebilir. Normal şartlarda Excel dosyamızı Dosya menüsünden Farklı Kaydet seçeneği yardımıyla metin dosyası (*.txt) olarak kaydetmemiz bu sorunu aşmamızı sağlayacaktır.
Ancak bazı durumlarda bizden verilerimizin belirli karakter uzunluklarında metin dosyasına aktarılması istenilebilir. Bu durumda ilk bahsettiğimiz seçenek ne yazık ki yeterli olmayacaktır. Ayrıca verilerimizin karakter uzunluklarının farklı olması da burada işimizi güçleştirebilecektir. Ancak Excel bizleri bu sıkıntılardan kurtarabilecek güçlü araçlar taşımaktadır, bu araçlar yardımıyla bu sorunlar kolayca aşılabilir
Şekil-1 deki gibi bir verimiz olsun.

Şekil-1
Bu veri ile ilgili olarak bizden uymamız istenilen kakakter sınırları da şu şekilde olsun.
Veri Hanesi |
Karakter Uzunluğu |
Tamamlama Karakteri |
Karakter Ekleme Yeri |
| Ürün Adı |
15 |
@ |
Verinin Sağına |
| Birim Fiyat |
10 |
0 |
Verinin Soluna |
| Miktar |
5 |
0 |
Verinin Soluna |
Ürün adlarının toplam uzunluğu 15 karakter olacak ve bu sayının altında olan verilerin sağ taraflarına
@ işareti eklenmek sureti ile 15 karaktere tamamlanacaktır. Birim Fiyat hanesi 10,
Miktar hanesi ise 5 karakter uzunluğunda olacak, tamamlamak için ise bu verilerin
sol taraflarına sıfır eklenecektir.
Bu problemin çözümünde 3 farklı Excel işlevi bir arada kullanılmalıdır.
Bu işlevler şunlardır:
=UZUNLUK(Metin)
=YİNELE(Yinelenecek_Karakter; Yineleme_Sayısı)
=BİRLEŞTİR(Metin1;Metin2;Metin3;…)
Uzunluk işlevi bize hücrede yer alan verinin karakter sayısını verecektir. (Şekil-2)

Şekil-2
Toplam karakter sayımızı bildiğimize ve hücremizdeki karakter sayısını da Uzunluk işlevi
yardımı ile öğrenebildiğimize göre artık bu iki veriyi kullanarak verimize eklenmesi
gereken karakter sayısını şu şekilde formüle edebiliriz:
=Veri Alanının Karakter Uzunluğu – Verimizin Karakter Uzunluğu
Örneğin; portakal için bu değer 15-8=7 olacaktır. Böylelikle Yinele işlevi için kullanacağımız verileri de elde etmiş olduk. Veri uzunluklarımız farklı olduğu için Yinele işlevinde belirteceğimiz yineleme sayısı da değişken olmalıydı ki Uzunluk işlevi yardımıyla yukarıdaki formülü kullanarak bu değeri elde edebiliyoruz.

Şekil-3
Şekil-3 te görüldüğü üzere Portakal verisi için veriye eklenmesi gereken metni Yinele ve Uzunluk
işlevleri yardımı ile elde etmiş olduk.
O halde artık elimizdeki bu iki veriyi birleştirerek sonuca ulaşabiliriz.

Şekil-4
Birleştir işlevi yardımıyla kolaylıkla istediğimiz sonuca ulaştık.
Artık geriye kalan sadece bu formülü diğer verilere de uygulamak.
Ancak Birim Fiyat ve Miktar haneleri için parametreler farklı olduğundan
söz konusu alanlar için Birleştir fonksiyonunu aşağıdaki gibi kullanıyoruz.
Birim Fiyat;
=BİRLEŞTİR(YİNELE("0";10-UZUNLUK(B3));B3)
Miktar;
=BİRLEŞTİR(YİNELE("0";5-UZUNLUK(C3));C3)
Yinelenecek karakteri, karakter uzunluğunu ve verinin birleştirme yerini değiştirdikten sonra
Portakal verisinin olduğu satır için yukarıdaki formülleri elde etmiş olduk.
Bu formülleri tüm tabloyu kapsayacak şekilde çoğalttığımızda sonuç Şekil-5 teki gibi olacaktır:

Şekil-5
Uzunluk formülü yardımıyla bütün hücreler kontrol edildiğinde sonucun istenildiği şekilde olduğu görülecektir.
Eğer Excel dosyanızı bu haliyle de metin dosyası (*.txt) olarak farklı kaydettiğinizde
istediğiniz sonuca ulaşamıyorsanız şu çözümü izlemelisiniz:
Boş bir sütunda Birleştir formülü yardımıyla aynı satırdaki verileri birleştirin.
Bu formülü listenizin uzunluğu kadar kopyalayın. Daha sonra yeni oluşturmuş olduğunuz
bu sütunu seçip kopyalayarak Notepad metin editörüne yapıştırın.
Örneğimiz için boş bir sütuna aşağıdaki formülü girerek liste uzunluğu kadar aşağıya
doğru kopyalayabilirsiniz:
=BİRLEŞTİR(A8;B8;C8;)
Yeni oluşturduğumuz bu sütunu seçip Notepad editörüne yapıştırdığımızda sonuç Şekil-6 daki gibi olacaktır.

Şekil-6
Yukarıdaki verinin 5 değil de 50.000 satır olması Excel için sadece ilave birkaç saniye daha demek olacaktı.
Oysa ki Excel'in gücünden yararlanılmadığı hallerde bu işlem için harcanacak emek ve zaman Excel'inki ile
ölçülemeyecek kadar büyük boyutlarda olurdu.
Aynı sonuca makro ile ulaşmak için aşağıdaki kodlar kullanılabilir:
'***************************************************************
Sub VeriAktar()
Dim sonsatir As Long
Dim Urun, Fiyat, Miktar As Range
Dim UrunVeri, FiyatVeri, MiktarVeri As String
sonsatir = Range("A1").End(xlDown).Row
Open "C:\VeriAktar.txt" For Output As #1
For Satir = 2 To sonsatir
Set Urun = Cells(Satir, "A")
Set Fiyat = Cells(Satir, "B")
Set Miktar = Cells(Satir, "C")
UrunVeri = Urun & WorksheetFunction.Rept("@", 15 - Len(Urun))
FiyatVeri = WorksheetFunction.Rept("0", 10 - Len(Fiyat)) & Fiyat
MiktarVeri = WorksheetFunction.Rept("0", 5 - Len(Miktar)) & Miktar
Print #1, UrunVeri & FiyatVeri & MiktarVeri
Next Satir
Close
MsgBox "Veriniz C:\VeriAktar.txt dosyasına kaydedilmiştir."
End Sub
'***************************************************************
İşlem mantığı ve kullanılan fonksiyonlar hemen hemen aynıdır.
En büyük fark verinin doğrudan metin dosyasına yazılmasıdır.
Excel - Metin dosyası ilişkisi için aşağıdaki adresler incelenebilir.
TXT Dosyaları ve Excel İlişkisi - 1
TXT Dosyaları ve Excel İlişkisi - 2 | |
|
|
 |
|
|
|