Yunus Özen
yunus@csharpturk.net

C# ile Excelden Veri Okumak

04 Ağustos 2006

Word, Excel gibi COM yeteneği olan uygulamalara C# ile ulaşmak ve işlem yapmak mümkündür.

 

Aşağıdaki uygulamada sabit diskte kayıtlı bir Excel belgesini okuyup içeriğini Listview ile göstereceğiz. Temel bağlantı işlemlerini ve mantığını gördükten sonra bu projeyi geliştirip daha kullanışlı uygulamalar yazabilirsiniz.

 

Önce sadece bir adet çalışma sayfasına sahip ve bizim için önemli 3 tane sütuna sahip bir Excel belgesi oluşturalım.

 

 

Visual Studio 2005 ile bir Windows projesi oluşturalım.

 

 

Toolboxtan projemiz üzerine bir Listview, bir Buttun ve bir OpenFileDialog sürükleyelim.  Formun görünümü aşağıdaki gibi olacaktır.

 

 

Şimdi Solution Explorer penceresinde Refences üzerine sağ tıklayarak Add Reference (Referans Ekle) seçelim.

 

 

 

Açılan penceredeki COM sekmesinden Microsof Excel 11.0 Object Library bileşenini seçip OK dediğimizde projemizin bin klasörü altına Inteop.Excel.dll ve Interop.Microsoft.Office.Core.dll adlı dll dosyalarının geldiğini göreceksiniz.

 

 

Şimdi artık Excel nesnemizi oluşturalım.

 

private Excel.Application ExcelNesnesi = null;

 

Excel açıldı ve formumuzun yapıcısında Excel Application referansı alındı. Excel açılmaz ya da problem olursa diye bir kontrol bloğu yazalım.

 

       public Form1()

        {

            InitializeComponent();

            ExcelNesnesi = new Excel.Application();

 

            if (ExcelNesnesi == null)

            {

                MessageBox.Show("Problem! Dosya Açılamadı.");

                System.Windows.Forms.Application.Exit();

            }

Şimdi Excel belgesi açıldı ve veri okuma işlemi yapabiliriz.

 

Form üzerindeki butonun click olayına belgenin açılması ve verilerin okunması için gerekli kodu yazalım.

 

private void button1_Click(object sender, EventArgs e)

{

    this.openFileDialog1.FileName = "*.xls";

    if (this.openFileDialog1.ShowDialog() == DialogResult.OK)

    {

        Excel.Workbook theWorkbook =

           ExcelNesnesi.Workbooks.Open(

             openFileDialog1.FileName,

             Type.Missing,

             Type.Missing,

             Type.Missing,

             Type.Missing,

             Type.Missing,

             Type.Missing,

             Type.Missing,

             Type.Missing,

             Type.Missing,

             Type.Missing,

             Type.Missing,

             Type.Missing,

             Type.Missing,

             Type.Missing);

 

     

        Excel.Sheets sheets = theWorkbook.Worksheets;

 

        Excel.Worksheet worksheet = (Excel.Worksheet)sheets.get_Item(1);

 

        for (int i = 1; i <= 10; i++)

        {

            Excel.Range range =

                worksheet.get_Range("A" + i.ToString(), "C" + i.ToString());

            System.Array myvalues = (System.Array)range.Cells.Value2;

            string[] strArray = ConvertToStringArray(myvalues);

            listView1.Items.Add(new ListViewItem(strArray));

        }

    }

}

 

openFileDialog1 ile xls uzantılı bir belge aldık. Daha sonra bir Excel Workbook oluşturarak Excel belgemizi açıp bu nesneye transfer ettik.

 

ExcelNesnesi.Workbooks.Open yöntemi parametre olarak sadece dosya ismini almaz. Object Borwser ile incelerseniz dosya ismi ile birlikte 15 tane parametre alır ama bize şu anda sadece dosya ismi alım diğerlerine Type.Missing yazarak boş bıraktık. 15 parametremizi de yönteme geçtik.

 

Workbook nesnemiz içerisindeki sheetleri sheets nesnesine transfer ettik.

 

worksheet adlı nesnemize de kısa bir örnek uygulama yaptığımız için açtığımız excel belgesinin çalışma sayfaları arasından sadece 1.çalışma sayfasını aldık.

 

Excel.Worksheet worksheet = (Excel.Worksheet)sheets.get_Item(1);

 

Yine kısa bir örnek yaptığımız için A, B ve C sütunlarından 10 tane satır okuduk.

 

myvalues adlı bir diziye 10X3 lük bir matris kadar veriyi almış olduk.

 

Bu arada myvalues dizisini yazdığımız ConvertToStringArray yöntemi yardımıyla strArray adlı string dizisine dönüştürdük.

 

string[] ConvertToStringArray(System.Array values)

{

    string[] theArray = new string[values.Length];

    for (int i = 1; i <= values.Length; i++)

    {

        if (values.GetValue(1, i) == null)

            theArray[i - 1] = "";

        else

            theArray[i - 1] = (string)values.GetValue(1, i).ToString();

    }

 

    return theArray;

}

 

 

Listview1 bileşenimize de bu string dizisini ekledik. Ekranda verilerimiz göründü. Tabiki bu şekilde string dizisi olarak verileri elde ettikten sonra ihtiyacımız doğrultusunda her türlü kullanabiliriz.

 

 

 

Biz örnek olması açısından Listview bileşeninde görüntüledik. İster gride aktarsınız, ister veritabanına yazarsınız ister grafik çizersiniz. Artık geliştirmek size kalmış.

 

Bu makale ilgili soru ve önerilerinizi C#Türk Forumda http://www.csharpturk.net/forum/forum_posts.asp?TID=15 urlsi altında sorabilirsiniz. Bu makalede kullandığımız örnek uygulama C#Türk Download bölümünde mevcuttur.

 

Sizler de bu örnek uygulamayı baz alarak geliştirdiğiniz uygulamalarınızı bize ulaştırırsanız diğer C# programcıları ile paylaşmak için sitemize ekleriz.

 

Yararlı olması dileklerimle, bir başka makalede görüşmek üzere hoşçakalın.

 

Örnek uygulamayı indirmek için tıklayınız.

Yorum Yaz

 
Ad  
Eposta     E-posta isteğe bağlıdır.
Yorum  
  Gönder       Temizle

Bu Makale İçin Yazılan Yorumlar

kunt kaan karabatak
15.05.2010
aldığın son satır boş demektir değer boş geldiğinde döngüden çık satır sayısı belli olmadan istediğin kadar veriyi al bu arada kardeş teşekkür ederiz tekrar süper oldu bu makale
Ebubekir Dirican
12.05.2010
"developercat"
eğer sormak istediğin soru dolu satır sayısını almak anlamına geliyosa "wsSheet.UsedRange.Rows.Count" (wsSheet, WorkSheet nesnesi) ile alabilirsin...
developercat
06.02.2010
satır sayısını bilmediğim bir excel dosyasını okumak için ne yapmalıyım peki?foru kaldırıp do while yazdım ama while deki şarta ne yazacağımı kestiremiyorum,yardımcı olursanız çok sevinirim önemli benim için.
developercar
06.02.2010
satır sayısını bilmediğim bir excel dosyasını okumak için ne yapmalıyım peki?foru kaldırıp do while yazdım ama while deki şarta ne yazacağımı kestiremiyorum,yardımcı olursanız çok sevinirim önemli benim için.
cem
16.12.2009
Acaba excelden veriyi okuduktan sonra onu Csv formatına çeviren ve stünları okuyup yan yana yazan bir uyguluma geliştirmemiz mümkünmü?
omer
06.05.2009
gerçekten güzel bir çalışma olmuş.
murat
22.02.2009
merhaba videosunu cekme imkanınız varsa lütfen cekelim
talha
02.01.2009
gerçekten teşekkürler hocam bende bununla ilgili bir çalışma yapıyorum.bu makaleyi bulmadan önce excel sayfasının içindeki verileri seçip sol üst köşeden isimlendirmem gerekiyordu şimdi bunu deniycem umarım artık o angarya işten kurtulurum uzun zamandır arıyorum :S gerçekten sağolsun inş. işime yarar
Barış Güleçyüz
22.12.2008
teşekürler.zaman ayırıp bizi bilgilendirdiğiniz için
Atilla
12.09.2008
Çok sağol süper bir yazı.