İlginizi Çekebilir
  1. Ana Sayfa
  2. C Sharp
  3. Excel Okuma ve XML Dönüştürme – Excel To XML

Excel Okuma ve XML Dönüştürme – Excel To XML

Bu dersteki excel okuma yöntemi OLEDB kullanmadan olacak. Yani OLEDB bağlantı cümlesi kullanmadan excel okuyacağız.

Excel-Okuma-ve-XML-Dönüştürme---Excel-To-XML

Merhaba, Excel Okuma ve XML Dönüştürme – Excel To XML yazım ile excelden verileri okuyup xml olarak nasıl dönüştüreceğimizi göreceğiz. Ancak bu dersteki excel okuma yöntemi OLEDB kullanmadan olacak. Yani OLEDB bağlantı cümlesi kullanmadan excel okuyacağız.

Excel Okuma ve XML Dönüştürme – Excel To XML

Projeyi başlattıktan sonra nuget package manager’e gelerek Browse sekmesini açıyoruz ve “excel data reader” diyoruz. Bulunan ilk iki paketi projemize kuruyoruz.

Excel Okuma ve XML Dönüştürme - Excel To XML

Bu paketleri kurduktan sonra kodlarımızı yazmaya başlayabiliriz. İlk olarak gerekli namespace’i ekliyoruz.

using ExcelApp = Microsoft.Office.Interop.Excel;

Aşağıdaki görsel hazırladığım form tasarımıdır.

Excel Okuma ve XML Dönüştürme

İlk işimiz exceli seçmek ve içeriğini okumaktır. Okuduğumuz verileri datagridview’de göstereceğiz.

C# Excel Okumak #1 – Excel To DataTable

OpenFileDialog ile okunacak exceli seçiyoruz. Ben Office 2013 kullanıyorum. Diğer sürümlerde test etmedim.

        DataTable dt_veriler;
        private void buttonGoster_Click(object sender, EventArgs e)
        {
            string DosyaYolu;
            string DosyaAdi;
            OpenFileDialog file = new OpenFileDialog();
            file.Filter = "Excel Dosyası | *.xls; *.xlsx; *.xlsm";
            if (file.ShowDialog() == DialogResult.OK)
            {
                DosyaYolu = file.FileName;
                textBox1.Text = DosyaYolu;
                DosyaAdi = file.SafeFileName;
                ExcelApp.Application excelApp = new ExcelApp.Application();

                if (excelApp == null)
                {
                    MessageBox.Show("Excel yüklü değil.");
                    return;
                }

                // seçilen excel açıldı
                ExcelApp.Workbook excelBook = excelApp.Workbooks.Open(DosyaYolu);
                // sayfayı seçtik
                ExcelApp._Worksheet excelSheet = excelBook.Sheets[1];
                // tüm veri alanlarını aldık
                ExcelApp.Range excelRange = excelSheet.UsedRange;
                int satirSayisi = excelRange.Rows.Count;
                int sutunSayisi = excelRange.Columns.Count;
                dt_veriler = ToDataTable(excelRange, satirSayisi, sutunSayisi);

                dt_veriler.TableName = DosyaAdi.Split('.')[0]; // burası XML'e alabilmek için önemlidir.

                dataGridView1.DataSource = dt_veriler;
                dataGridView1.Refresh();

                excelApp.Quit();
                System.Runtime.InteropServices.Marshal.ReleaseComObject(excelApp);
            }
        }

Kodlarımız yukarıdaki gibidir. Excel’e OLEDB ile bağlanmak yerine program içerisinden exceli açıp okuma şekli yöntemi ile okuyoruz. Burada verileri XML olarak almak için datatable’a bir isim vermek zorundayız. Aksi halde aktarım sırasında hata verecektir.

Ben burada dosyanın adını kullandım. Siz isterseniz farklı bir isim kullanabilirsiniz. Türkçe karakter kullanmamaya özel gösterin.

C# Excel Okumak #2 – Excel To DataTable

Şimdi gelelim ToDateTable metodumuza. Verileri okuyup datatable’a alan kodlarımız bu metot içerisindedir.

        public DataTable ToDataTable(ExcelApp.Range range, int rows, int cols)
        {
            DataTable table = new DataTable();
            try
            {
                for (int i = 1; i <= rows; i++)
                {
                    if (i == 1)
                    { // exceldeki ilk satır kolon adlarıdır.
                      // ilk satırı kolon başlıkları olarak alıyoruz.
                        for (int j = 1; j <= cols; j++)
                        {
                            // ilk satırda boş alan var m diye kontrol ediliyor.
                            if (range.Cells[i, j] != null && range.Cells[i, j].Value2 != null)
                                table.Columns.Add(range.Cells[i, j].Value2.ToString());
                            else //boş ise standart isim veriyoruz.
                                table.Columns.Add(j.ToString() + ".Kolon");
                        }
                        continue;
                    }
                    // kolonlara göre bir tablo oluşturuyoruz.
                    // okunmuş verileri almak için yeni bir satır açıyoruz.
                    var yeniSatir = table.NewRow();
                    for (int j = 1; j <= cols; j++)
                    {
                        // hücrelerin dolu mu boş mu olduğuna bakılıyor.
                        if (range.Cells[i, j] != null && range.Cells[i, j].Value2 != null)
                            yeniSatir[j - 1] = range.Cells[i, j].Value2.ToString();
                        else // boş hücrede hata vermesin diye boş bırakıyoruz.
                            yeniSatir[j - 1] = String.Empty;
                    }
                    table.Rows.Add(yeniSatir);
                }
                return table;
            }
            catch (Exception ex)
            {
                MessageBox.Show("Excel, Tablo olarak alınamadı. Hatalar: " + Environment.NewLine + ex.ToString());
                return null;
            }
        }

Kodlar arasında açıklamalar yer almaktadır. Açıklamaları inceleyebilirsiniz.

Verileri XML Olarak Almak – Excel To XML

SaveFileDialog kullanarak datatable’a aldığımız verileri xml olarak dışarı aktaracağız. Sitemdeki tüm XML derslerim için bağlantıya tıklayabilirsiniz.

        private void btn_verileri_xmle_al_Click(object sender, EventArgs e)
        {
            SaveFileDialog sfd = new SaveFileDialog();
            sfd.Filter = "XML|*.xml";
            if (sfd.ShowDialog() == DialogResult.OK)
            {
                try
                {
                    dt_veriler.WriteXml(sfd.FileName);
                    if (MessageBox.Show("XML dosyası hazırlandı. Dosya açılsın mı?", "Onay Verin", MessageBoxButtons.YesNo, MessageBoxIcon.Question) == DialogResult.Yes)
                        System.Diagnostics.Process.Start(sfd.FileName);
                }
                catch (Exception ex)
                {
                    MessageBox.Show(ex.ToString());
                }
            }
        }

DataTable sınıfının WriteXml metodu ile verileri xml olarak dışarı aktarabiliyoruz.

 

NOT: Proje dosyaları arasında örnek bir excel ve xml yer almaktadır.


Excel Okuma ve XML Dönüştürme – Excel To XML yazımda bu kadar arkadaşlar.  Diğer derslerimizde görüşmek üzere.

C Sharp Eğitim Seti eğitimi sayfasına gitmek için tıklayınız.  Derslerime özel olarak hazırladığım Github Projeme buradan ulaşabilirsiniz… Ayrıca bu projenin Github Sayfasına bağlantıya tıklayarak ulaşabilirsiniz.

Arkadaşlar ayrıca Telegram kanalıma abone olabilir ve yeni yazılardan anında haberdar olabilirisiniz. https://t.me/mbchsarpsqlyardim. Aynı zamanda sorular sorabileceğiniz chat grubumuz da mevcuttur.

Sağlıcakla ve kodla kalın….

Yorum Yap

Yazar Hakkında

Liseden, Ağ Sistemleri ve Yönetimi bölümünden mezun oldum. Üniversiteden (2 yıllık), Bilgisayar Programcılığı bölümünden mezun oldum. Şuanda da AÖF, Yönetim Bilişim Sistemleri bölümünde okumaktayım. Uzmanlık alanlarım; Windows Sistemleri, HTML, CSS, C# ve SQL’dir. Hobi olarak uğraştığım genel konular, Photoshop, After Affects, Corel Draw’dır.Film, YABANCI dizi, Anime izlemeyi ve Manga okumayı severim. Arkadaşlarımla yürüyüş yapmayı ve grup olarak aktivitelere gitmeyi severim. Geri kalan zamanlarımın tümü bilgisayar karşısında geçer.

Değerli yorumlarınızı bekliyorum. Lütfen yorum atmadan geçmeyin. :)

Yorumlar (2)

  1. 2 ay önce

    Hata CS0103 ‘ToDataTable’ adı geçerli bağlamda yok . Böyle bir hata oluşuyor.

    • MErhaba,
      ToDataTable kodlardaki bir metottur. Yazı içerisinde de zaten verdiğim bir metot. Sanırım o metodu almadınız.
      C# Excel Okumak #2 – Excel To DataTable başlığı altındadır.

Bir cevap yazın

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir