Aşağıdaki programda C# kullanarak COM ile Excel dosyasını açmayı ve belirtilmiş aralıktaki hücreleri okuyacağız.
Excel ile çalışabilmek için Microsoft Excel 15.0 Object Library referans kütüphanesi yüklenmelidir. Önceli makalelerden bu referansı nasıl yükleneceğini inceleyebilirsiniz.
C# ile Excel Dosyası Oluşturma
Excelde istediğimiz aralığı nasıl belirtebiliriz.
Excel sayfasında istediğimiz özel bir hücreyi seçmek istersek yazmamız gereken kod aşağıdaki gibidir.
1 2 3 4 5 |
Excel.Worksheet excelSayfa = workbook.ActiveSheet; Excel.Range rng = (Excel.Range)excelSayfa.Cells[10, 10]; |
Belirlenmiş bir aralığı seçmek için de yazılacak kod örneği;
Çoklu hücre seçimi için de kodlarımız şu şekilde oluşacaktır.
1 2 3 4 5 |
Excel.Worksheet excelSayfa = workbook.ActiveSheet; Excel.Range rng = (Excel.Range) excelSayfa.[excelSayfa.Cells[1, 1], excelSayfa.Cells[3,3]]; |
Peki Exceldeki belirtilmiş hücre aralığımız C# kısmında nasıl tanımlanacaktır. Excelden C# tarafında kaç tane hücre alındığını öğrenmek için UsedRange özelliği ile alınan son hücrenin index bilgisi döndürülmüş olacaktır.
1 2 3 4 5 |
Excel.Range range ; range = xlWorkSayfa.UsedRange; |
range değişkeni içinde kullımakta olan index sayısı döndürülecektir.
Aşağıdaki kodları windows form yada wpf üzerinde bir butona bağlayarak çalıştırdığımızda belirttiğimiz bölümdeki excel dosyasından okuma yaparak bilgileri ekrana yazdıracaktır. Programın çalışması yorum satırları şeklinde açıklanmıştır.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 |
Excel.Application xlUygulama;//uygulama değişkeni tanımlandı Excel.Workbook xlKitap;//kitap değişkeni tanımlandı Excel.Worksheet xlSayfa;//sayfa değişkeni tanımlandı Excel.Range range;//aralık değişkeni tanımlandı string str; int satir = 0; int sutun = 0; xlUygulama = new Excel.Application();//excelin bir örneği oluşturuldu //belirtilen yoldaki excel dosyası açıldı ve ilk sayfası okunmaya başlandı xlKitap = xlUygulama.Workbooks.Open("d:\\yazilimbilisim.xls", 0, true, 5, "", "", true, Excel.XlPlatform.xlWindows, "\t", false, false, 0, true, 1, 0); xlSayfa = (Excel.Worksheet)xlKitap.Worksheets.get_Item(1); //okunan sayfadaki son bölümün index değeri alındı. //satır ve sütun olacak şekilde iki boyutlu bir yapı üzerinde hareket edilecektir. range = xlSayfa.UsedRange;//alınacak aralık belirtilmediği için sayfa içindeki tüm alanları alacaktır. //satır ve sütunlar üzerinde dönerek ekrana okuduğumuz bilgileri yazdırıyoruz. for (satir = 1; satir <= range.Rows.Count; satir++) { for (sutun = 1; sutun <= range.Columns.Count; sutun++) { str = (string)(range.Cells[satir, sutun] as Excel.Range).Value2; MessageBox.Show(str); } } xlKitap.Close(true, null, null); xlUygulama.Quit(); /*Ram üzeründen de excelin bağlantısını kaldırıyoruz.*/ try { System.Runtime.InteropServices.Marshal.ReleaseComObject(xlUygulama); xlUygulama = null; } catch (Exception ex) { xlUygulama = null; MessageBox.Show("Hata " + ex.ToString()); } finally { GC.Collect(); } |
Not1: using Excel = Microsoft.Office.Interop.Excel; eklemeyi unutmayın.
Not2: D diski üzerinde yazilimbilisim.xls dosyası olduğunu varsayılarak oluşturulmuştur. Sizde kendi xls dosyanızın yolunu belirtin.
Excelde 50 Puanın altındaki öğrencilerin sayıp ekrana kaç tane öğrencinin kaldığını yazdıran program
Uygulamayı çalıştırmak için resimdeki gibi excel dosyasını oluşturup yazilimbilisim.xls yerine kendi excel dosyanızı yazınız.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 |
Excel.Application xlUygulama; Excel.Workbook xlKitap; Excel.Worksheet xlSayfa; Excel.Range range; object misValue = System.Reflection.Missing.Value; int satir=3; int sutun=3; int kalanSayisi = 0; xlUygulama = new Excel.Application(); xlKitap = xlUygulama.Workbooks.Open("d:\\yazilimbilisim.xls", 0, true, 5, "", "", true, Excel.XlPlatform.xlWindows, "\t", false, false, 0, true, 1, 0); xlSayfa = (Excel.Worksheet)xlKitap.Worksheets.get_Item(1); range = xlSayfa.UsedRange; for (satir = 2; satir <= range.Rows.Count; satir++) { int ortalama = (int)(range.Cells[satir, sutun] as Excel.Range).Value2; if (ortalama < 50) kalanSayisi++; } MessageBox.Show("Kalan Öğrenci Sayısı="+kalanSayisi.ToString()); xlKitap.Close(true, null, null); xlUygulama.Quit(); |
Notu 50 Puanın altında olan öğrencilerin sayısını bulma örneğinin ikinci çözüm yolu
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 |
Excel.Application xlUygulama; Excel.Workbook xlKitap; Excel.Worksheet xlSayfa; Excel.Range tumAralik,rng; int kalanSayisi = 0; xlUygulama = new Excel.Application(); xlKitap = xlUygulama.Workbooks.Open("d:\\yazilimbilisim.xls", 0, true, 5, "", "", true, Excel.XlPlatform.xlWindows, "\t", false, false, 0, true, 1, 0); xlSayfa = (Excel.Worksheet)xlKitap.Worksheets.get_Item(1); tumAralik = xlSayfa.UsedRange; Excel.Worksheet excelSheet = xlKitap.ActiveSheet; rng = (Excel.Range)excelSheet.Range[excelSheet.Cells[2, 3],excelSheet.Cells[tumAralik.Rows.Count, 3]]; for (int satir = 1; satir <= rng.Rows.Count; satir++) { //rng ile artık bizi ilgilendiren satırlar geldiği için //yapı artık bir sutün 20 satırdan oluşuyor int ortalama = (int)(rng.Cells[satir, 1] as Excel.Range).Value2; if (ortalama < 50) kalanSayisi++; } MessageBox.Show("Kalan Öğrenci Sayısı="+kalanSayisi.ToString()); xlKitap.Close(true, null, null); xlUygulama.Quit(); |
Kaynak:
www.csharp-console-examples.com