C# Excel içe aktarma ve dışa aktarma (Access Veritabanı)

 C#  Excel içe aktarma ve dışa aktarma (Access Veritabanı)
Okunuyor C# Excel içe aktarma ve dışa aktarma (Access Veritabanı)

Selamun aleyküm arkadaşlar dışa aktarma konusunda kimsede problem görmedim ancak c# excel içe aktarma yaparken problem yaşayan arkadaşlar olmuş access olsun sql server olsun nasıl içeri aktaracağını göstereceğim.

C# Excel içe aktarma ve dışa aktarma 

 

c# excel içe dışa aktarma

Yaptığım bir projeden örnek göstererek gideceğim.Bu sayede sizde gerçek bir proje üzerinde nasıl kullanılır görmüş olacaksınız.Öncelikle

C# Excel içeri aktarma

Kaydederek deme sebebim bazı durumlarda aynı veriden içeride varsa belirli alanlarını güncellemesini isteyebilirsiniz.Bu stoğu barkodu vesaire olabilir.Kaydederken buna dikkat etmez ! Sadece içeride aynı veriden var mı diye kontrol edip ardından ,içeri aktarmamız yeterli olacaktır.

ADIM 1 : Kütüphanemizi projemize yüklüyoruz.

microsoft office interop excel dll indirelim https://yadi.sk/d/6ihPidtcWqpCrw

ardından projemizizin solution explorer kısmındaki referances kısmına gelip add referances diyelim.Ve indirdiğimiz referansı seçerek projemize yükleyelim.

Projemizin içindeki kütüphanelerimize kodlarımızı ekleyelim.

using System.Data.OleDb;
using System.IO;
using Microsoft.Office.Interop.Excel;

artık excel kodlarını c# içerisinde kullanabiliriz.Şimdi 2. adıma geçelim.

ADIM 2 : Veritabanı ve Excel Aktaracağımız alanlar seçiyoruz.

Aktarmak istediğim access veritabanım.

accessveritabaniexceldenaktarma

Aktarma Yapacağım Excel Örneğim..

aktarilacakexceldosyasiaccese

ADIM 3 : Teker teker excelden verileri çekip seçili duruma göre aktarma veya kaydetme işlemi yapıyoruz..

BUTON İÇERİ AKTARMA KODLARIM…SİZ KENDİNİZE GÖRE SADELEŞTİREBİLİRSİNİZ.

  private void btn_import_Click(object sender, EventArgs e)
        {

            try
            {



                OpenFileDialog FileUpload1 = new OpenFileDialog();
                FileUpload1.Filter = "Excel Dosyası |*.xlsx| Excel Dosyası|*.xls";
                FileUpload1.RestoreDirectory = true;
                FileUpload1.CheckFileExists = false;
                FileUpload1.Title = "Excel Dosyası Seçiniz..";
                FileUpload1.ShowDialog();
                //excel dosyamızı alıyoruz
                string dosyayolu = FileUpload1.FileName;
                yeniyol = "ExcelFile\\" + Guid.NewGuid().ToString() + ".xls";
                File.Copy(dosyayolu, yeniyol);
                listBox3.Items.Add(yeniyol);
                listBox3.Items.Add("Seçtiğiniz Excel Şablonu Yukarıdaki Yola Yedeklenmiştir. ");

            }
            catch (Exception hata)
            {
                MessageBox.Show("Hata Aldınız ! " + hata.Message);

            }
            try
            {
                //excel bağlantı yolumuzu seçili excel yoluna göre düzenliyoruz

                String ExcelPath = yeniyol;
                textBox1.Text = "Seçilen Excel Yolu : " + ExcelPath;
                OleDbConnection mycon = new OleDbConnection("Provider = Microsoft.ACE.OLEDB.12.0; Data Source = " + ExcelPath + "; Extended Properties=Excel 8.0; Persist Security Info = False");


                string barkod;
                string kitap_adi;
                double kdvsiz_fiyat;
               
                string stokadeti;

                //aktarcağımız alanları teker teker alacağımız için bunları tutacak değişkenler oluşturuyoruz.
                mycon.Open();
                string tableSheetName = (string)mycon.GetSchema("tables", new string[] { null, null, null, "TABLE" }).Rows[0]["TABLE_NAME"];
                mycon.Close();



                mycon.Open();
                //tablesheetname stringine excel sayfaadını çekiyoruz kullandığınız dile göre değişiklik gösterebileceği için bunu dinamik yapmak bizi olağan hatalardan kurtaracaktır.
                OleDbCommand cmd = new OleDbCommand(string.Format("Select * from [{0}]", tableSheetName), mycon);          
                OleDbDataReader dr = cmd.ExecuteReader();
                //ve tüm excel verilerinde teker teker dolaşiyoruz
                while (dr.Read())
                {
                    if (dr[0].ToString() != "")//ismi boş olanları çekme
                    {
                        try
                        {
                            
                            barkod = dr[1].ToString(); //barkod 1. sütününda yer alıyor excel dosyamızın bunu değişkenimize çektik
                            kitap_adi = dr[0].ToString().Replace("'", " ");
                            kitap_adi.Replace("-", " ");// - kod olarak algılayabileceği için boşluk ile değiştirdik
                            stokadeti = dr[2].ToString();
                            kdvsiz_fiyat = double.Parse(dr[3].ToString());
                            //  durum = dr[3].ToString();
                            if (radioButton1.Checked == true)//eğer ekleyerek içeri aktar seçiliyse
                            {//burda ekleme işlemini teker teker access dosyamıza yapıyoruz 
                                insertexcel(barkod, kitap_adi, kdvsiz_fiyat, stokadeti);

                            }
                            else if (radioButton2.Checked == true)//güncelleyerek içeri aktar seçiliyse
                            {//güncelleyerek içeri aktarıyoruz
                                updateexcel(barkod, kitap_adi, kdvsiz_fiyat);
                                listBox1.Items.Add(kitap_adi + " Güncelleme İşlemi Başarılı");
                                sayac1++;
                            }


                        }
                        catch (Exception hata)//hata verip hata alan kitaplarin adlarını gerekli listboxlarımıza yazıyoruz.
                        {
                            sayac1++;
                            sayac2++;
                            kitap_adi = dr[0].ToString().Replace("'", " ");
                            listBox2.Items.Add("Hata ! " + hata.Message + " Kitap Adı : " + kitap_adi);

                        }


                    }
                    else
                    {

                        break;
                    }

                }
                listBox3.Items.Add(sayac1.ToString() + " Başarılı İşlem Gerçekleşmiştir");
                listBox3.Items.Add(sayac2.ToString() + "Ekleme İşlemi Başarısız Olmuştur ");
                listBox3.Items.Add(sayac3.ToString() + " İşlemin Barkodları Girilememiştir !");// sayaçlarımızla aldiğimiz bilgileri listboxlarımıza ekliyoruz.
                //label4.ForeColor = Color.Red;
                label5.ForeColor = Color.Green;
                mycon.Close();
                sayac3 = 0;
                sayac2 = 0;
                sayac1 = 0;
                listele();
                File.Delete(ExcelPath);//sayaçları sıfırladık....
            }
            catch
            {

                ;
            }

            ///raporlama
       /*     try
            {
                OleDbConnection baglan = new OleDbConnection("provider=microsoft.ace.oledb.12.0;data source=kitapveritabanı.accdb");
                string bilgisayarAdi = Dns.GetHostName();
                string ipAdresi = Dns.GetHostByName(bilgisayarAdi).AddressList[0].ToString();
                baglan.Open();
                OleDbCommand raporaekle = new OleDbCommand("insert into raporlama(bilgisayar_adi,islem_yapan_ip,islem_adi,islem_aciklama,islem_tarihi,islem_saati) values('" + bilgisayarAdi + "','" + ipAdresi + "','" + "İçe Aktarma İşlemi" + "','" + "Ürünler Tablosunda İçe Aktarma İşlemi Yapılmıştır" + "','" + DateTime.Now.ToShortDateString() + "','" + DateTime.Now.ToShortTimeString() + "')", baglan);
                raporaekle.ExecuteNonQuery();
                baglan.Close();
            }
            catch (Exception hata)
            {

                MessageBox.Show("Rapora Eklerken Hata Oluştu.Hata mesajı: " + hata.Message);
            }

    */


            ///
        }

 

Burada ufak karmaşalar var örneğin excel tablo adını otomatik çekmem yada hatalar başarılı işlemler için sayaçlar kullanmam yada aktardığım excel dosyasını dinamik bir isimle excel klasörüme kaydetmem gibi siz bunlardan arındırarak daha sade şekilde kodlarınızı oluşturabilirsiniz.Ben yinede örneğimdekine yakın yazmak isteyenler için bu kodları örneğe ekledim.

 

ADIM 3 : bize butonumuz aracılığı ile gelen verileri seçili duruma göre kullandığımız fonksiyonlarla access veritabanımıza işliyoruz…

Excel’den access veritabanımıza kaydetme kodu

   public void insertexcel(string barkod, string kitap_adi, double kdvsiz_fiyat, string stokadeti)
        {
            try
            {
                OleDbConnection baglan = new OleDbConnection("provider=microsoft.ace.oledb.12.0;data source=kitapveritabanı.accdb");

                //veritabanı bağlantımı yazdım.
                ///////

                baglan.Open();
                OleDbDataReader dr;
                OleDbCommand cmd = new OleDbCommand("SELECT * FROM urunler where barkod='" + barkod + "'", baglan);
                //içeri aktaracağımız veri içeride varmı diye çektiğimiz barkoddaki.
                dr = cmd.ExecuteReader();
                if (dr.Read())
                {

                    listBox2.Items.Add(kitap_adi + " Eklenmedi; Bu Kitap Veritabanında Mevcut !...");
                    sayac3++;
                }
                else
                {





                    OleDbCommand kmt2 = new OleDbCommand("INSERT INTO urunler(urun_adi,barkod,fiyati,girisTarihi,adet) VALUES ('" + kitap_adi + "','" + barkod + "','" + kdvsiz_fiyat + "','" + DateTime.Now.ToShortDateString() + "','" + stokadeti + "') ", baglan);
                    //gönderilen bilgileri veritabanındaki uygun alanlara kaydettik
                    kmt2.ExecuteNonQuery();
                    kmt2.Dispose();
                    listBox1.Items.Add(kitap_adi + " Ekleme İşlemi Başarılı");
                    sayac1++;

                    if (barkod.Length < 1)
                    {
                        listBox2.Items.Add(kitap_adi + " Adlı Kitabın Barkodu Eklenemedi...");
                        sayac3++;
                    }






                }

                baglan.Close();


            }
            catch (Exception hata)
            {
                listBox2.Items.Add(hata.Message + " " + kitap_adi);
                sayac2++;

            }


        }

 

Excelden Access veritabanımıza ismi veya barkodu referans alarak güncelleme yapma kodu

Öncelikle kullanıcıya barkoda göre mi yoksa isme göre mi güncelliyeceğini sordum.Aldığım yanıta göre güncelledim.Sizde kendi alanlarınıza uygun bu şekilde işlemler yapabilirsiniz.

guncelleyerekexceliceaktarma

 

Kodumuza geçelim.

  public void updateexcel(string barkod, string kitap_adi, double kdvsiz_fiyat)
        {
            try
            {
                OleDbConnection baglan = new OleDbConnection("provider=microsoft.ace.oledb.12.0;data source=kitapveritabanı.accdb");

                baglan.Open();
                if (radioButton3.Checked == true)
                {
                    OleDbCommand kmt2 = new OleDbCommand("update urunler set urun_adi='" + kitap_adi + "',fiyati='" + kdvsiz_fiyat + "' where barkod='" + barkod + "'  ", baglan);


                    kmt2.ExecuteNonQuery();
                    kmt2.Dispose();
                    baglan.Close();
                }
                else if (radioButton4.Checked == true)
                {

                    OleDbCommand kmt2 = new OleDbCommand("update urunler set barkod='" + barkod + "',fiyati='" + kdvsiz_fiyat + "' where urun_adi='" + kitap_adi + "'  ", baglan);


                    kmt2.ExecuteNonQuery();
                    kmt2.Dispose();
                    baglan.Close();
                }


                if (barkod.Length < 1)
                {
                    listBox2.Items.Add(kitap_adi + " Adlı Kitabın Barkodu Güncellenemedi...");
                    sayac3++;
                }
            }
            catch (Exception hata)
            {
                listBox2.Items.Add(hata.Message + " " + kitap_adi);
                sayac2++;

            }



        }

Bu kadar basit arkadaşlar kodlar kafanızda karmaşıklık yapmasın hepsi basit.Anlamadığınız yada kendi projenize uygularken hata aldığınız yerler olursa yorum olarak yazmayı unutmayın.Elimden geldiğince yanıtlayacağım.

C# Excel Dışarı aktarma

Bu konuda çok problem olduğunu zannetmiyorum.Hangi verimizi dışarı aktaracaksak datagridwiewe çekiyoruz.Ardından aşşağıdaki kodu çalıştırıyoruz.

 

            try
            {


                OleDbConnection baglan = new OleDbConnection("provider=microsoft.ace.oledb.12.0;data source=kitapveritabanı.accdb");
                DialogResult cevap;
                cevap = MessageBox.Show("Faturalar Tablosunu da Boşaltılsın İstiyor Musunuz ? ", "Uyarı", MessageBoxButtons.YesNo, MessageBoxIcon.Question);
                if (cevap == DialogResult.Yes)
                {
                    baglan.Open();
                    OleDbCommand tablobosalt = new OleDbCommand(" delete from fatura", baglan);
                    tablobosalt.ExecuteNonQuery();
                    baglan.Close();
                    ///
                }

                Microsoft.Office.Interop.Excel.Application excel = new Microsoft.Office.Interop.Excel.Application();
                excel.Visible = true;
                object Missing = Type.Missing;
                Workbook workbook = excel.Workbooks.Add(Missing);
                Worksheet sheet1 = (Worksheet)workbook.Sheets[1];
                int StartCol = 1;
                int StartRow = 1;
                for (int j = 0; j < dataGridView2.Columns.Count; j++)
                {
                    Range myRange = (Range)sheet1.Cells[StartRow, StartCol + j];
                    myRange.Value2 = dataGridView2.Columns[j].HeaderText;
                }
                StartRow++;
                for (int i = 0; i < dataGridView2.Rows.Count; i++)
                {
                    for (int j = 0; j < dataGridView2.Columns.Count; j++)
                    {

                        Range myRange = (Range)sheet1.Cells[StartRow + i, StartCol + j];
                        myRange.Value2 = dataGridView2[j, i].Value == null ? "" : dataGridView2[j, i].Value;
                        myRange.Select();


                    }
                }

            }
            catch (Exception hata)
            {

                MessageBox.Show("Hata Aldınız" + hata.Message);
            }

Bu örnekte datagridwiew2 yi dışarı aktardım.Eğer macrolar kodlar vs varsa excel verilerinizde aktarma işlemi o verilerde başarısız olacaktır.

Destek olarak yorum yazabilir adblockeri kapatabilirsiniz.Allah’a emanet olun.

Bizi bilen bilir.

Yapılan Yorumlar

Bir Cevap Yazın

This site uses Akismet to reduce spam. Learn how your comment data is processed.