9 Haziran 2015 Salı

C# excel veri aktarma

Merhaba arkadaşlar.

Bu yazımızda c# listview kayıtlarını excel ortamına nasıl aktarabileceğimize bakacağız. Bu işlemleri yaparken de en basit ve en kolay şekilde işlemlerimizi tamamlayacağız.

İlk iş olarak Visual Studio Ide mizde boş bir c# web form projesi oluşturmakla işleme başlıyoruz. Bunun içinde File -> New -> Project Adımlarını iziliyoruz. Sonrasında New Project penceresinin sol panelinde yer alan Visual C# kategorisine tıklıyoruz ve hemen ardından sağ panelden Windows Forms Application Seçeneğine tıklıyoruz.
Yukarıda ki resimde sayıları takip ederseniz projemizi oluşturabilirsiniz. Burada dikkat edeceğimiz nokta 4. Adımda browser seçeneğine tıklayarak projemizin oluşturulacağı dizini belirtmek. Birde pencerenin en üst kısmında yer alan .Net Framework 4.5 seçeneğinin seçili olması. Tabi siz isterseniz 4.0 veya daha farklı bir sürümü seçebilirsiniz. Benim minimum tercihim 4.0 dır. Çünkü güncel sürümleri kullanmanız sizin açınızdan faydalı olacaktır.

Bu arada unutmadan proje isminde karakter kullanılmıyor. Nasıl hata alacağınızı göstermek için tercih ettim :)
C# ı Csharp olarak değiştirip projemi oluşturdum.

Formumuzun örnek görüntüsü aşağıda ki gibi oldu.




Bunun için formumuza bir adet Listview ve bir adet Button sürükleyip bıraktık. Button üzerinde bir defa tıklayıp ardından Name kısmına kolay olsun diye btnAktar adını verdik.
Listview için işe yanda ki görüntüyü elde edebilmek için öncelikle listview seçili halde iken properties penceresinden View özelliğini Detail olarak düzenledik.
Örnek olarak yanda verilen resimde numaralandırılmış alanlardan 1 numaralı alanı Details yaptık.

2. adımda ise başlıklarımızı belirledik.

Örnek başlıklarımız. UrunID, Ürün Adı, Adet


Yukarıda ki adımları tamamladıktan sonra form görüntümüz ilk resimdeki hale gelecektir.

Şimdi öncelikle listview içerisine kayıt çekmemiz gerekiyor. Normal şartlarda database veritabanından kayıt çekiyoruz fakat makalenin çok uzamaması adına ben manuel kayıt ekleyecem. Çünkü bizim için önemli olan excel ortamına en doğru ve düzgün şekilde aktarmak.

Bu nedenle formumuzun boş bir alanına çift tıklayarak code kısmına geçelim hemen ve formLoad fonksiyonunun dışına aşağıdaki formu yazalım.




private void listviewDoldur()
{
   try
   {
     // 20 tane ürünü dinamik olarak eklemsi için kulandık. artırıp azaltabilirsiniz.
       int urunSayisi = 20;

   // For dönüsü ile ürün sayısı kadar ekleme işlemi yapıyoruz
       for (int i = 0; i < urunSayisi; i++)
       {
         // eklenecek ürünler için örnek bir dizi tanımlıyoruz
           string[] urunler = {
                               "UrunID"+i.ToString(),
                               "Urun Adı " + i.ToString(),
                               "Adet :" + i.ToString()
                               };
           ListViewItem urun = new ListViewItem(urunler); // listview için item tipinde nesne oluşturuyoruz
           listView1.Items.Add(urun); // listview1 adında olan listview nesnemize urun itemini yüklüyoruz
         } // for bitis
   }
   catch (Exception ex)
   {
   MessageBox.Show("Ürün ekleme işlemi sırasında bir hata meydana geldi.\n Hata içeriği:"+ex.ToString());
    }           
}

Yukarıda ki kodun hemen ardından form load loayına aşağıdaki kodu ekleyip projemizi bir çalıştıralım. Bakalım verilerimiz doğru bir şekilde gelecek mi?

private void Form1_Load(object sender, EventArgs e)
        {
            listviewDoldur();
        }

Şimdi projemizi derliyoruz.


Kodlarımız doğruymuş :)

Şimdi ise excel'e aktarma işlemine geçelim. Bunun için öncelikle çalıştırdığımız uygulamayı kapatıp visual studio ortamında ki projemizin kod kısmına geçiyoruz tekrardan.

İlk adım olarak projemize sistem dosyasını çağırıyoruz ve projenin en üstünde bulunan alana aşağıdaki kodu ekliyoruz. Böylelikle referans dosyamızı programımıza dahil etmiş oluyoruz.


using Microsoft.Office.Interop.Excel;
şimdi ise aktarma işlemini gerçekleştirecek olan fonksiyonumuzu yazıyoruz.
        /// 
        ///  ListView verilerini dinamik olarak excel dosyasına aktarır
        /// 
        /// Aktarım Yapılacak ListView nesnesinin IDsi
        public void excelAktar(ListView lw, ProgressBar pb = null)
        {
            try
            {
                Microsoft.Office.Interop.Excel.Application xls = new Microsoft.Office.Interop.Excel.Application();
                Workbook wb = xls.Workbooks.Add(XlSheetType.xlWorksheet);
                Worksheet ws = (Worksheet)xls.ActiveSheet; // çalışma alanı aktif çalışma alanı

                xls.Visible = true; // görünürlük aktif
                #region manuelBaslikalani
                // alanları manuel olarak yazıyoruz
                /*ws.Cells[1, 1] = "Stok Kodu";
                ws.Cells[1, 2] = "Barkod";
                ws.Cells[1, 3] = "Stok Adı";
                ws.Cells[1, 4] = "Stok Miktar";
                ws.Cells[1, 4] = "Stok Grubu";
                ws.Cells[1, 5] = "Stok Markası";
                */
                #endregion
                // Eğer Progress bar nesnesi null değil ise sıfırlama ve ayarlama işlemini gerçekleştir
                if (pb != null)
                {
                    pb.Maximum = Convert.ToInt32(lw.Items.Count.ToString());
                    pb.Value = 0;
                }

                // Şimdi ise dinamik olarak colon bilgilerini alıyoruz ekliyoruz
                for (int i = 0; i < lw.Columns.Count; i++)
                {
                    // alanları manuel olarak yazıyoruz
                    ws.Cells[1, i + 1] = lw.Columns[i].Text.ToString();
                }
                // Şimdi de lw içerisindeki verileri dinamik olarak aktarıyoruz
                int _i = 2; // 2. satırdan itibaren içerikleri doldurmaya başla
                int j = 1;
                foreach (ListViewItem item in lw.Items)
                {
                    ws.Cells[_i, j] = item.Text.ToString();
                    foreach (ListViewItem.ListViewSubItem subitem in item.SubItems)
                    {
                        ws.Cells[_i, j] = subitem.Text.ToString();
                        j++;
                    }
                    j = 1;
                    _i++;
                    // Eğer Progress bar nesnesi null değil ise artırma işlemini yap
                    if (pb != null)
                    {
                        pb.Value = _i - 2;
                    }

                }
                // column sütunları yazı boyutuna göre ayarlıyor
                xls.Columns.AutoFit(); 

               // aktarama işlemi sırasında alabileceğimiz hatalara karşı önlem olarak hata bastırma işlemi yapılıyor
                xls.AlertBeforeOverwriting = false; 
            }
            catch (Exception)
            {
             // hata fırlatıyoruz :)
                throw;
            }
        }

Bir sonraki adıma geçelim. Projemizin grafik arayüzüne geçiyoruz bunun için solution penceresinden Form1 üzerine çift tıklıyoruz. Grafik arabiriminde eklemiş olduğumuz Excel'e Aktar butonuna çift tıklayarak tekrardan kod kısmına geçiyor ve button click olayına aşağıdaki kodu yazıyoruz.

 private void btnAktar_Click(object sender, EventArgs e)
        {
            excelAktar(listView1);
        }

Şimdi ise projemizi derliyoruz. Eğer bir sorun çıkmaz ise işlem tamamdır. Evet her zamanki gibi bir hatamız varmış.

Bu hatada bize referans olarak bir dll dosyasının eksik olarak çağrılması gerektiğini belirtiyor. Peki bu işlemi nasıl yapacağız.

Bunun için hemen solution explorer penceresinden projemiz altından Referances alanına gelip sağ tıklıyoruz.

Resim de numaralandırılmış alana sağ tıklıyoruz.  Add Referance linkine tıklıyoruz. Karşımıza aşağıdaki gibi bir ekran gelecek. Bu ekrandan da Assemblies altında Extensions seçeneğini seçip ilgili dll dosyamızı arıyoruz.



Evet yukarıdaki kütüphanemizi seçip ok tuşuna basıyoruz ve projemizi tekrar derliyoruz.

Evet projemiz çalıştı. Şimdi Excel'e Aktar butonuna tıklayıp programın çalışıp çalışmayacağını kontrol edelim. Hadi Bismillah.



Ve sonuç başarılı :D Hiç hata almadık. Biz bu projemizde excel çıktısına dikkat ederseniz listview başlıklarımızı da dinamik olarak dahil ettik. Siz isterseniz excelAktar fonksiyonu içerisinde bulunan manuelBaslikalani alanı aktif ederek kendi belirlediğiniz başlıkları da ekleyebilirsiniz.


Umarım işinize yarar bir makale olmuştur. Projenin çalıştırılabilir sürümünü de en kısa sürede github üzerinden indirebilirsiniz.

Kaynak için Link1  Link2!

Faydalı olması dileğiyle...

0 yorum:

Yorum Gönder