C# ile Excel’e Hükmedin – 1 (Doküman Oluşturma, Yazma, Kaydetme)

Microsoft Visual Studio 2010 kullanarak GUI ile Microsoft Excel 2010 uyumlu excel dokümanı oluşturup tablo dolduracağız. Daha sonra dosyamızı kayıt edeceğiz.

İlk olarak sisteminizde excel yüklü olması gerekiyor. Office 2003,2007 veya 2010 olması şuanlık önemli değil. Visual studio’yu açıp C# windows form projesi oluşturuyoruz.

Daha sonra Excel nesnesini projemize eklememiz gerekiyor. Solution Explorer->Reference->Add Reference yolunu takip ediyoruz…

Daha sonra açılan pencereden .NET sekmesinden Microsoft.Office.Interop.Excel‘i seçip onaylıyoruz. Birde COM sekmesinden Microsoft Office 14.0 Object Liabrary‘i seçiyoruz.

Yanılmıyorsam Office 2010’da Microsoft.Office.Interop.Excel versiyonu 12 iken, 2007’de 8, 2003’te ise 4.

Aşağıdaki kodları form1.cs’nin en başına ekliyoruz.

using Microsoft.Office.Core;
using Excel = Microsoft.Office.Interop.Excel;

Aşağıdaki gibi basit bir arayüz tasarlıyoruz.

Şimdi ise bir excel dokümanı oluşturup satır-sütun numarasına göre ekleme yapan ve dosyayı kaydeden programın fonksiyonlarını yazabiliriz. Her seferinde yeni bir excel dokümanı oluşturmak böyle bir program için mantıksız ancak işin temelinden başlamak için bu şekilde gideceğim. Bir sonraki excel yazısında ise bilgisayarımızda bulunan herhangi bir excel dosyasını düzenleyeceğiz.

Form1 sınıfının içinde aşağıdaki tanımlamaları yaptık.

Excel.Application ExcelUygulama;
Excel.Workbook ExcelProje;
Excel.Worksheet ExcelSayfa;
object Missing = System.Reflection.Missing.Value;
Excel.Range ExcelRange;

int rowCnt = 0;
int columnCnt = 0;

string s_dosyaadi = "";
string s_veri = "";

Form1 load eventi;

private void Form1_Load(object sender, EventArgs e)
{
ExcelUygulama = new Excel.Application();
ExcelProje = ExcelUygulama.Workbooks.Add(Missing);
ExcelSayfa = (Excel.Worksheet)ExcelProje.Worksheets.get_Item(1);
ExcelRange = ExcelSayfa.UsedRange;
ExcelSayfa = (Excel.Worksheet)ExcelUygulama.ActiveSheet;

ExcelUygulama.Visible = false;
ExcelUygulama.AlertBeforeOverwriting = false;
}

Burada ilk olarak excel uygulamasını açtık. Daha sonra çalışma kitabı oluşturduk. Bu çalışma kitabından 1.sayfayı açtık. Excel uygulamasının görünürlük vs ayarlamaları yapıldı.

Yaz butonu click eventi;

private void b_yaz_Click(object sender, EventArgs e)
{
rowCnt = (int)t_row.Value;
columnCnt = (int)t_column.Value;
s_veri = t_veri.Text;
if (s_veri != "" && rowCnt != 0 && columnCnt != 0)
{
Excel.Range bolge = (Excel.Range)ExcelSayfa.Cells[rowCnt, columnCnt];
bolge.Value2 = s_veri;

MessageBox.Show("İlgili bloğa başarıyla yazıldı.");
}
else
{
MessageBox.Show("Lütfen bir veri giriniz. (Satır veya Sütun sıfır olamaz.)");
}

}

Burada seçilen satır ve sütuna veri değeri yazılıyor. Dikkat ettiyseniz “0” değerini almadık. Çünkü excel’de satır ve sütun 1’den başlar.

Kaydet butonu click eventi;

private void b_kaydet_Click(object sender, EventArgs e)
{
s_dosyaadi = t_dosyaadi.Text;
if (s_dosyaadi != "")
{
ExcelProje.SaveAs(Application.StartupPath + @"\" + s_dosyaadi + ".xlsx", Excel.XlFileFormat.xlWorkbookDefault, Missing, Missing, false, Missing, Excel.XlSaveAsAccessMode.xlNoChange);
ExcelProje.Close(true, Missing, Missing);
ExcelUygulama.Quit();

MessageBox.Show("Dosya Başarıyla Kaydedildi.");
}
else
{
MessageBox.Show("Lütfen Bir Dosya Adı Giriniz.");
}

}

Burada ise dokümanımızı programımızla aynı klasörde girdiğimiz isimle kaydediyoruz. Daha sonra excel çalışma kitabını kapatıp, uygulamayı sonlandırıyoruz.

 

Görüldüğü gibi excel kullanımı gayet basit. Anlaşılmayan kafanıza takılan biryer olursa yorum kısmından sorabilirsiniz. Projeyi de aşağıdaki linkten indirebilirsiniz…

http://www.mediafire.com/?8b7ngj3nqxghryt

Bir sonraki yazımda görüşmek üzere, hoşçakalın… 🙂

31467 Total Views 1 Views Today

1 ping

Yorumu formunu geç

    • Sezgin on 13 Ekim 2012 at 21:13
    • Cevapla

    Merhabalar,
    Öncelikle bu faydalı çalışma için teşekkür ederim. Soruma gelince;
    Mevcut excel dosyasını kod içersinde nasıl görüntüleyebiliriz yada düzenleyebiliriz. Bununla ilgili herhangi bir çalışmanız varmı ?

    1. İlerleyen zamanlarda “C# ile Excel’e Hükmedin – 2” adı altında bir yazı yayınlayacağım. O yazıda düzenleme, veri çekme gibi konulara değineceğim.

    • hakan on 04 Ocak 2013 at 19:18
    • Cevapla

    ExcelProje.SaveAs(Application.StartupPath + @”\” + s_dosyaadi + “.xlsx”, Excel.XlFileFormat.xlWorkbookDefault, Missing, Missing, false, Missing, Excel.XlSaveAsAccessMode.xlNoChange);

    Kısmında “Exception from HRESULT: 0x800A03EC” hatası veriyor.Çözüm nedir birtürlü bulamadım.

    1. Eski sürüm excel yüklüyse bilgisayarınızda bu hatayı almanız normal. Çünkü eski sürüm excel “xlsx” yerine “xls” formatında kayıt yapıyor. Dosya -> Secenekler -> Kaydet -> Dosyalari bu biçimde kaydet seçeneginden excel çalışma kitabını seçin varsa “xlsx”i seçin. Eğer sorun çözülmediyse C# kodunuzda kayıt formatını “xlsx” yerine “xls” yapın.

    • Fatih on 19 Kasım 2013 at 17:55
    • Cevapla

    hocam excel versiyonu farklı bir bilgisayarda yazdığımız kodu çalıştırmak istediğimizde hata ile karşılaşıyoruz. Bunun pratik bir yöntemi yok mu? Setup olarak yazdığımız prpjeyi dağıtacağız, ama herkese de gidin office in şu versiyonunu kullanın demek mantıklı değil. Başka bir yöntem olmalı.

    1. Programı en düşük versiyona sahip excel’de yazarsanız sanırım sorun çıkarmayacaktır.

    • Nagehan on 22 Kasım 2013 at 17:45
    • Cevapla

    Hocam,
    Elimde yaklaşık 50 tablo var excelle aktarmam gereken. Farklı excell dosyaları şeklinde değilde aynı excell de farklı çalışma sayfaları şeklinde oluşturmak istiyorum. Mümkün müdür? Yardımlarınız için çok teşekkürler..

    1. Farklı worksheetler kullanarak yapabilirsiniz. Mesela bu yazıda 1 numaralı worksheeti kullanmışım. Active sheeti değiştirerek geçiş yapabilirsiniz.

  1. Merhabalar. Vermiş olduğunuz örnek kodda (int)t_column.value ifadesindeki t_column değişkenini nerede tanımladınız acaba? Programı kopyala/yapıştır şeklinde denemek istediğimde (int)t_column.value ve (int)t_row.value geçen her satır için tanımlanmadığına dair hata almaktayım. Emeğinize sağlık…

      • ebubekir on 07 Aralık 2013 at 15:02
      • Cevapla

      kusura bakmayın. ben satır ve sütun için textbox kullanıp int32 ye çevirerek kaydettim. şimdi ne anlama geldiğini anladım. Tekrar elinize sağlık…

  2. Numeric UP/DOWN boxlarin isimleri onlar…

    • dyg on 28 Mart 2014 at 19:05
    • Cevapla

    Merhabalar.. Farklı formlardan aynı aynı excel dosyasına veri göndermeyi nasıl yapıyoruz peki.şimdiden teşekkürler

    1. Tam olarak neyi soruyorsunuz ? Çünkü yazıdaki kodla farklı formlardan aynı excel dosyasına yazabilirsiniz.

    • dyg on 28 Mart 2014 at 20:01
    • Cevapla

    öncelikle cevap verdiğiniz için teşekkürler.şöyle anlatayım.20 den fazla formdan oluşan bir program yazdım.hepsinden aynı excel dosyasına veri göndermem gerekiyor.ama ne kadar uğraşsam da her formda yeni excel dosyası açılıyor.
    ExcelUygulama = new Excel.Application(); bu koddan dolayı sanırım. ya da ben uygulayamadım.

    1. Son yazımı okuduğunuzu düşünmüştüm. Son yazımda excel dosyalarını düzenlemeye değindim.

      http://www.tugayarslan.com/c-ile-excele-hukmedin-2-dokuman-duzenleme-veri-cekme-datagridviewda-gosterme-duzenleme/

    • asd on 13 Mayıs 2014 at 10:08
    • Cevapla

    rowCnt = (int) t_row.Value;
    columnCnt = (int)t_column.Value;
    s_veri = t_veri.Text;
    if (s_veri != “” && rowCnt != 0 && columnCnt != 0)
    {

    bu kısımda t_row ve t_column kısımları hata veriyor hocam ne yapmalıyım

    1. Projeyi indirip tüm kodu görebilirsiniz. Büyük ihtimal ya tanımlamadınız ya da yanlış tanımladınız.

    • stevegates on 03 Haziran 2015 at 10:11
    • Cevapla

    Hocam Merhaba,
    Bende buna benzer bir örnek yaptım fakat bir problem var ben excel açıkken programı çalıştırdığımda normal bir biçimde çalışırken exceli kapatıp programı çalıştırdığımda “Additional İnformation= dış tablo istenilen biçimde değil” hatası alıyorum bunu nasıl düzeltebilirim.
    Teşekkür Ederim.

    • Davut on 19 Ağustos 2015 at 13:35
    • Cevapla

    Merhabalar, sorum genel olarak Excel yapısı ile ilgili olacak. Java, C# vs diller ile Excel’e hükmedilebiliyor, evet. Peki Excel açık iken veri girişi yapabiliyor muyuz excel’e? Yani misal internetten gelen veriyi C# ile çekeceğim yorumlayacağım, daha sonra da String şeklinde tablonun boş bir sütununa 20 sn aralıklarla yazdıracağım. Bu mümkün müdür? İyi çalışmalar…

  3. elimde hazır bir taslak var(tablo, gridview ve labeller) taslağı ve gerekli bilgileri ayniyle C# form’a çektim. şimdi bunun çıktısını almam gerekiyor. formun printscreenini alıp yazdırınca kötü, amatör bir görünüm elde ediyorum. bu taslağı olduğu gibi excele aktarmam gerek, sadece gridview i çekebilme işlemi için veriler bulabildim ancak taslağı bozmamam gerekiyor. Bu mümkün mü, nasıl bir yöntem tavsiye edersiniz?

    • Mustafa on 08 Haziran 2017 at 18:42
    • Cevapla

    Merhaba, ben excel değil de veri tabanından gelen anket sonuçlarını PDF olarak yazdırmak istiyorum. Gelen sonuçları pdf dosyasına göre nasıl kaydedeceğim çok acil yardımcı olurmusunuz

    • fatih on 27 Ağustos 2017 at 22:39
    • Cevapla

    usta programın başladığı yere değil de C:\ ye kaydet dediğimde hata alıyorum. yardımcı olur musunuz?

    • demet şen on 27 Aralık 2017 at 20:35
    • Cevapla

    merhaba, Belirli bi excel dokümanını projeme ekleyip onunla proje içinde çalışmak istiyorum. Örneğin fatura şablonu excel dosyası. Excel dosyamı projeye attığımda boş açılıy çalıştığında.

    • orhan on 10 Temmuz 2018 at 14:39
    • Cevapla

    Kolay gelsin hocam ben c# ile excelde grafik oluşturup bunları bu grafikleri mail olarak göndermek istiyorum nasıl bir yol izlemeliyim. şididen tesekkür ederim.

    • Mahmud on 06 Kasım 2018 at 22:33
    • Cevapla

    Başındaki Application.StartupPath kısmını silmen gerek çünkü onun kullanım amacı uygulama içine kayıt et manasına gelir. Bunu yaptığın halde C: ye kayıt etmeye bilir. Çünkü Yönetici izni gerekli . onun yerine D: ye yazarsan bu sorunda ortadan kalkar. Veya Programı yönetici olarak çalıştırmanı tavsiye ederim.

  1. […] sorabilirsiniz. Daha tamamlamam gereken Android yazısı var. Unuttum zannetmeyin Daha önceki yazıda yeni excel dokümanı oluşturma, yazma ve kaydetmeye değişmiştik. C# ve Excel ile ilgili olan […]

Bir cevap yazın

Your email address will not be published.

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