C# WinForms ve Mono GTK

C# ile Bazı Excell İşlemleri

C# ile varolan Excel dosyasının bir sayfasındaki belirli hücrelere yazı yazdırmak için şu işlemleri yapmak gerekir. Alışık olduğumuz şekilde dosya adını yazınca exe’nin bulunduğu klasörü otomatik algılamıyor. Dosyanın tam yolunu belirtmek gerekiyor. Ben bu sebepten ötürü exe’nin bulunduğu klasörü path adında bir stringe atadım.

string path = System.IO.Path.GetDirectoryName(Application.ExecutablePath);

Microsoft.Office.Interop.Excel.Application uyg = new Microsoft.Office.Interop.Excel.Application();
Microsoft.Office.Interop.Excel.Workbook kitap = uyg.Workbooks.Open(path + @"\excelDosyam.xls");
Microsoft.Office.Interop.Excel.Worksheet sheet1 = (Microsoft.Office.Interop.Excel.Worksheet)kitap.Sheets[1];

Yukarıdakiler tanımlamak için gerekli bilgilerdi. Arkaplanda excel.exe programını açıyor. Dosyayı seçiyor. Sonrasında çalışma sayfasını seçiyor. çalışma sayfam 1. sayfa olduğundan Sheets[1] diyorum. Hücreye veri yazdırabilmek için ;

Microsoft.Office.Interop.Excel.Range myRange = (Microsoft.Office.Interop.Excel.Range)sheet1.Cells[satırNo,kolonNo];
myRange.Value2 = DateTime.Now.ToShortDateString();

 

Yeni Excel dosyası oluşturarak işlem yapmak için;

Microsoft.Office.Interop.Excel.Application uyg = new Microsoft.Office.Interop.Excel.Application();
Microsoft.Office.Interop.Excel.Workbook kitap = uyg.Workbooks.Add(System.Reflection.Missing.Value);
Microsoft.Office.Interop.Excel.Worksheet sheet1 = (Microsoft.Office.Interop.Excel.Worksheet)kitap.Sheets[1];

Microsoft.Office.Interop.Excel.Range myRange = (Microsoft.Office.Interop.Excel.Range)sheet1.Cells[satırNo,KolonNo];
myRange.Value2 = DateTime.Now.ToShortDateString();

Excel sayfasının kullanıcıya görünür olmasını istediğim yerde;

uyg.Visible = true;

Excel dosyasında bir kelimeyi aramak ve bulunduğu hücreyi editlemek için;

Microsoft.Office.Interop.Excel.Range Rng = sheet1.get_Range("A1", "L100");  //Arama aralığı
Microsoft.Office.Interop.Excel.Range findRange = Rng.Find("metinyakar.net");
findRange.Value2 = "yazımız";

Yukarıdaki örnekte hücredeki tüm veri editlenir. Eğer sadece aradığımız kelimeyi editlemesini istersek;

myrange.Replace("arananKelime","yerineKonacakKelime");

Kullanıcıya farklı kaydet yaptırabilmek ve kaydedeceği yeri seçme imkanı verebilmek için;

SaveFileDialog sf = new SaveFileDialog();
sf.ShowDialog();
kitap.SaveAs(sf.FileName);

Excel yazdırma önizlemesi açtırabilmek için;

uyg.Visible = true;
sheet1.PrintPreview();

 

11 Comments

  • Ahat BEK
    13 Aralık 2015 - 17:10 | Permalink

    Sayım Metin YAKAR hocam (C# ile Bazı Excel İşlemleri) adlı yazınızı okudum ve uyguladım çok güzel bir örnek olmuş.
    Aslında benimde aradığım bir şeydi ne diyelim elinize sağlık ve zihniniz bol olsun.
    Hocam eğer mümkünse aşağıdaki sorunum hakkında yanıtlarsanız sevinirim.

    sheet1.PrintPreview();
    Yerine direkt o sayfayı bir veya iki nüsha yazdırmak için ne yapmam gerek yani önizleme olmadan yazdırabilmek.
    Şimdiden teşekkür eder saygılar sunarım.
    Allah razı olsun.

    • meto260
      29 Aralık 2015 - 15:20 | Permalink

      printout() kullanabilirsiniz. İlginize teşekkürler.

  • Fatih Tas
    14 Kasım 2016 - 16:34 | Permalink

    merhaba
    form1 bir label txt sini daha önceden kaydettiğim aa.xlsx adlı excell dosyasına a5 hüçresine yazdırmak istiyorum kısaca bunun yazabilirseniz gercekten mutlu olurum şimdiden teşekkür ederim.

    • meto260
      15 Kasım 2016 - 16:12 | Permalink

      myRange = (Microsoft.Office.Interop.Excel.Range)sheet1.Cells[5,1];
      myRange.Value2 = label1.Text;

  • Selahattin Açıkgöz
    28 Aralık 2016 - 01:47 | Permalink

    Merhaba;
    Öncelikle paylaşımınız çok açıklayıcı ve net olmuş. Tam olarak benim yapmak istediğim bir tane excell dosyam şablon olarak bulunsun ve ben bunu gerektiğinde belirttiğim satır ve stunlara datagridview den çekip exceldeki satır ve stunlara yazdırıyım. Otomasyon için suanda bu çok gerekli bununda kısaca mantığını açıklayabilirseniz inanılmaz yardımınız dokunucak. Şimdiden teşekkürler.
    Saygılar.

    • meto260
      29 Aralık 2016 - 15:25 | Permalink

      Bildiğiniz gibi Datagridview matris biçiminde düşünülerek atama yapılıyor. Dolayısıyla iç içe bir döngü içerisinde dönerken dış döngüyü satır, iç döngüyü kolon olarak düşünürseniz;

      DatagridViewSatiri[satirNo][KolonNo] = Cells[satırNo,KolonNo];

      pozisyonunu yakalarsanız çok az bir kodla kendi excel tablonuzu elde edebilirsiniz.

      Birbaşka yöntem ise excel dosyası eğer sql tablosu gibi sıralı verilerden oluşuyorsa ona database odbc kullanarak veritabanı nesnesi gibi davranabilirsiniz. Bu durumda sql sorgusuyla datagridinizi doldurabilirsiniz.

  • Kenan
    4 Nisan 2017 - 01:11 | Permalink

    Günlerdir bulamadım. Elimizde olan excel dosyasının istediğimiz sayfada birkaç hücresinin verisini değiştirip kaydetmeyi. Yeni excel açmasını istemiyorum. buna örnek bir projesi olan varsa paylaşımını rica ederim.

    • Kenan
      4 Nisan 2017 - 01:13 | Permalink

      listbox veya datagridview kullanılabilir

    • meto260
      8 Nisan 2017 - 10:54 | Permalink

      Keşke ne dediğiniz anlaşılabilse

  • 1 Kasım 2017 - 13:48 | Permalink

    metin hocam, aradım ama bulamadım. excell sayfasının açılan sayfasında işlem yapmak istiyorum ama sayfa ismi bazen sheet1 bazıları sayfa1 bazıları özel dosya ismi verilmiş. Ben sayfa1 yazdığımda sheet1 olanı okutamıyorum. sheet1 yazsam başka özel çalışma sayfası ismiyle olanlarda işlem yapamıyorum.

    Excell dosyasını açtığımda ilk çalışma sayfasının ismini okuyup işlemleri ona göre nasıl yapabilirim. Bu işte çok acemi olduğumu biliyorum, yardımcı olursanız inanılmaz bir sıkıntıdan kurtarmış olursunuz. minnettar kalırım dua ederim… vs.vs.

    • meto260
      1 Kasım 2017 - 14:22 | Permalink

      Microsoft.Office.Interop.Excel.Worksheet sayfa1 = (Microsoft.Office.Interop.Excel.Worksheet)kitap.Sheets[1];
      Şeklinde yazmışsan kabul edecektir. Kodun sonundaki [1] kısmı 1. sayfayı getiriyor yani çalışma sayfasının adının bir önemi yok. [2] yazarsan 2. sayfa gelecektir ve bunu numerik bir döngüde çevirirsen dosyadaki tüm sayfalarda işlem yapabilirsin.

  • Bir Cevap Yazın

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