C# ile excel programına veri transfer örneği:
Aşağıdaki gibi bir form oluşturulup datagridview’e veri bağlantısı kuralım. Veri bağlantısı kurma sıkıntısı çekerseniz önceki dersleri inceleyebilirsiniz.
Daha sonra Solution Explorer dan “References” e sağ tıklayarak Add Reference diyoruz. Daha sonra karşımıza ” Reference Manager ” sayfası gelecektir. Excel’e aktarım işlemi yapacağımız için buradan ” Microsoft.Office.Interop.Excel ” (Microsoft Excel 15.0 Object Library) i seçiyoruz.ve reference ekleme işlemini bitirmiş oluyoruz.
.
Kodlamaya geçiyoruz. Kod satırında en üste
1 2 3 4 |
using Excel = Microsoft.Office.Interop.Excel; using Microsoft.Office.Interop.Excel; |
ekliyoruz. Daha sonra Excel’e Aktar butonuna çift tıklayarak aşağıdaki kodları ekliyoruz.
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 |
private void button1_Click(object sender, EventArgs e) { Excel.Application excel = new Excel.Application(); excel.Visible = true; object Missing = Type.Missing; Workbook workbook = excel.Workbooks.Add(Missing); Worksheet sheet1 = (Worksheet)workbook.Sheets[1]; int StartCol = 1; int StartRow = 1; for (int j = 0; j < dataGridView1.Columns.Count; j++) { Range myRange = (Range)sheet1.Cells[StartRow, StartCol + j]; myRange.Value2 = dataGridView1.Columns[j].HeaderText; } StartRow++; for (int i = 0; i < dataGridView1.Rows.Count; i++) { for (int j = 0; j < dataGridView1.Columns.Count; j++) { Range myRange = (Range)sheet1.Cells[StartRow + i, StartCol + j]; myRange.Value2 = dataGridView1[j, i].Value == null ? "" : dataGridView1[j, i].Value; myRange.Select(); } } } |
Programı çalıştırıp “Excel’e Aktar” butonuna bastığınızda Datagrid’ deki verilerin Excel’e aktarıldığını göreceksiniz.
DataGridview’de seçili olan satırların aktarılması istenirse DatagridView özelliklerinden SelectionMode özelliği FullRowSelect, MultiSelect özelliği ise True yapıldıktan sonra aşağıdaki kodlar uygulanabilir.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 |
private void button7_Click(object sender, EventArgs e) { Excel.Application excel = new Excel.Application(); excel.Visible = true; object Missing = Type.Missing; Workbook workbook = excel.Workbooks.Add(Missing); Worksheet sheet1 = (Worksheet)workbook.Sheets[1]; int StartCol = 1; int StartRow = 1; for (int x = 0; x < dataGridView1.SelectedRows.Count; x++) { for (int j = 0; j < dataGridView1.SelectedRows[x].Cells.Count; j++) { Range myRange = (Range)sheet1.Cells[StartRow , StartCol + j]; myRange.Value2 = dataGridView1.SelectedRows[x].Cells[j].Value == null ? "" : dataGridView1.SelectedRows[x].Cells[j].Value; } StartRow++; } } |
C# Word’ e Veri Aktarma Örneği için Tıklayın.
C# Access Veritabanı Bağlantısı Örneği için Tıklayın.
C# Excele belirli bir koşula bağlı olarak biçimlendirmeli veri aktarma örneği için tıklayın.
Örneğe ait videoyu izleyebilirsiniz.
Basvuru yoneticisinde bulunamadı Microsoft.Office.Interop.Exce NET FRAMEWORK 4.7.2 kullanıyorum ama
Bilgilendirme için teşekkürler, işime yaradı.
İstedğimiz hücreye nasıl yazdırabiliriz acaba ?
tarihleri hücre biçiminden dolayı rakam olarak atıyor nasıl düzeltebiliriz
5 dataGridView i ayrı butonlarla aktarmaya çalışıyorum kod içinde dataGridView1 dataGridView2 …. diye değiştirerek yazıyorum fakat her seferinde dataGridView1 içerisindekileri aktarıyor. sebebi ne olabilir acaba
usta ben excel’e aktardıktan sonra otomatik olarak belgelerim’e kaydetmesini istiyorum. ama bir türlü yapamadım. programın başladığı yere kaydediyorum ama belgelerim’e kaydedemiyorum. Yardımcı olur musunuz?
usta dg den excele tarih aktarırken tarihleri sayı olarak aktarıyor. yani 25.06.2017 yi 42940 olarak aktarıyor. nasıl düzeltebilirim
Merhabalar hocam bir çok deneme yaptım ama olmadı sürekli aynı hatalarla karşılaştım.Farklı yollarlada yapamaya çalıştım sürekli olarak excel.visable= true da visablenin altını çiziyor. excel.workbooks da da aynı neden kaynaklı olabilir.
Ben o sorunu çözdüm hocam ama başka bir sorum var.Bu seferde bir datagridview im var
biçimlendirilmiş şekilde içinde sütünlarım,satırlarım, checkbox vs var verilerimi excele aktarıyorum aynı şekilde o dosyaları import etmek istiyorum hepsi yerli yerine nasıl yapabilirm
Aşağıdaki linke linkte excel verilerinin datagridview içine çekilmesiyle ilgili basit bir örnek var. Belki yardımcı olur.
http://www.yazilimkodlama.com/programlama/c-ile-excel-dosyasina-baglanma/
Merhaba hocam. Bir sorum var. Belki yardimci olabilirsiniz. Nette aradim icinden cikamadim. Bir datagridim var. Orada musteriler ve aldiklari seyler var. Musteri kolonunda mail adresleri var. Bu datagriddeki maillere bir butona tiklayarak aldiklari urunlerin listelerini nasil gonderirim? Datagridin hepsini birden bir maillere gonderebiliyorum. Fakat herkesin kendi mailine ayri ayri gonderemiyorum. Yardimci olursaniz mutlu olurum. En azindan bir fikirde verseniz olur. Basarili derslerinizin takipcisiyim. Kolay gelsin.
excel açılmadan içerisine doldurtup kaydetmeyi nasıl yaparım ?
aspx’te myRange.Value2 = dataGridView1[j, i].Value == null ? “” : dataGridView1[j, i].Value; bu satırda bu kısım dataGridView1[j, i] hata veriyor nasıl değiştirebiliriz burayı ?
http://www.yazilimkodlama.com/web/asp-net-ile-gridview-deki-verileri-word-ve-excel-dosyasina-aktarma/
Teşekürler işimizi gördü
Paylaşım için tesekkurler, cok isime yaradı. Peki başıkları ve satırları biçimlendirmek için ne yapabiliriz? örnek: tablo çizgileri görünsün, tablodaki başlığa yada içeriğe göre otomatik genişletsin, başlık puntosu vs.. teşekkürler
İşinize yaradığına sevindim. Alttaki linki inceleyebilirsiniz. Excele aktarma ve biçimlendirme işlemlerini inceleyebilirsiniz.
http://www.yazilimkodlama.com/programlama/c-excel-e-veri-gonderme-ve-bicimlendirme/
Hızlı geri dönüş ve açıklayıcı makale için teşekkür ederim. En üste başlık ekledim, grid başlık sayısı örneğin 5 ise üst başlıktaki satırın birleştirilmiş olarak nasıl hazırlatabiliriz?
s.a hocam
WPF de datagrid deki verileri excel aktarmak istiyorum ama olmadı sizin verdiğiniz örnekte datagridwievde olduğu için datagrid de hata veriyor yardımcı olurmusunuz.
Bu konuyla ilgili bir yazı ekleyerek sitede yayınlayacağım.
teşekkürler hocam bekliyor olacağım.
Örnek eklendi. Kolay gelsin.
Ben datagridview den excel e aktardığımda excel salt okunur diyor. Oysaki excel önceden olan bir excel. sadece datagrid den bir satır sildim. Kalanının tekrar exce de görülmesini istiyorum fakat excel imi açtığımda salt okunur diyor. Tamam dediğimde ise sildiğim satır öylece duruyor.
hocam bende çalıyor fakat sadece başlıklar geliyor. alt satırları aktarmıyor. ne olaki acaba?
Excel.Application exceldosya = new Excel.Application();
exceldosya.Visible = true;
object Missing = Type.Missing;
Office.Workbook kitap1 = exceldosya.Workbooks.Add(Missing);
Office.Worksheet sekme1 = (Excel.Worksheet)kitap1.Sheets[1];
int sutun = 1;
int satir = 1;
for (int j = 0; j dataGridView1.Columns.Count; i++)
{
for (int j = 0; j > dataGridView1.Columns.Count; j++)
{
Excel.Range myrange = (Excel.Range)sekme1.Cells[satir + i, sutun + j];
myrange.Value2 = dataGridView1[j, i].Value == null ? “” : dataGridView1[j, i].Value;
myrange.Select();
}
}
bu yöntemle ortalama 14000 adetilik veriyi aktarmak 7 dakika sürüyor bunun daha hızlı bir yolu yok mu
Merhaba,
Yaptığınız kodlardan faydalanarak sorunumu halletmeye çalıştım fakat;
“An unhandled exception of type ‘System.Runtime.InteropServices.COMException’ occurred in mscorlib.dll
Additional information: HRESULT özel durum döndürdü: 0x800AC472”
hatası alıyorum. Sorunun nerde olduğunu çözemedim, yarımcı olursanız çok sevinirim..
Office 2003 mü kullanıyorsunuz?
Evet. Ben de aynı sorunu yaşadım. Office 2013 kullanıyorum.
HOCAM BEN 2010 KULLANIYORUM OFFİCE Yİ DE LİSANSLADIM FAKAT YİNEDE ŞU HATAYI VERİYOR;”Microsoft.Office.Interop.Excel.ApplicationClass’ türündeki COM nesnesi ‘Microsoft.Office.Interop.Excel._Application’ arabirim türüne atanamadı. ‘{000208D5-0000-0000-C000-000000000046}’ IID’sine sahip arabirim için COM bileşenindeki QueryInterface çağrısı aşağıdaki hatayla başarısız olduğundan bu işlem başarısız oldu: Tür kitaplığı/DLL yükleme hatası. (HRESULT özel durum döndürdü: 0x80029C4A (TYPE_E_CANTLOADLIBRARY)).’
HATASINI ALMAKTAYIM BUNUN SEBEBİ VERSİYON İLE ALAKALIMI ÖYLE İSE HANGİ VERSİYONU KULLANMALIYIM
Office Lisansınız olmadığında hata veriyor. Lisanslamadan sonra sorun çözüldü. Tecrübeyle sabit.
Yazınızdan faydalandım. Teşekkür ederim.
Microsoft Office’i yüklemeden Excel için Object Library’i referans gösteremedim(open office kullanıyordum). Ancak bir şekilde Microsoft Office kurduktan sonra referans gösterebildim.
Başarılar dilerim.
Bilgilendirmeniz için teşekkür ederim.
datagridview deki satırlardan bir kaç tane seçip sadece oları excele aktarabiliyor muyuz?
Aktarılabilir. Yazının altına nasıl yapılabileceği eklendi.
üstad peki arama işlemini nasıl yapabiliriz
Buradaki kodlar Excel’ e veri aktarıyor. Excel dosyasına bağlanıp ekleme silme tarzı işlemler için linkini verdiğim konuya göz atabilirsiniz.
http://www.yazilimkodlama.com/c-2/c-ile-excel-dosyasina-baglanma/
Merhaba teşekkürler öncelikle. Ancak datagridviewdaki verileri excele aktardıktan sonra programı sadece task manager ile kapatabiliyorum. Neden kaynaklanıyor olabilir teşekkürler
Herhangi bir sorun olmaması gerekiyor. Veritabanı bağlantı kısımlarına da bir göz atın isteseniz.
Yazının altına video da ekledim.
Hocam öncelikle emeklerinize sağlık çok faydalı olmuş gerçekten işime yaradı.Ancak şöyle bi sıkıntı var bunula iligli kaynaklar da oldukça kısıtlı.verileri excele aktarırken ortalı olarak rapor etmeyi nasıl yapacam?
Teşekkürler. Aşağıda vermiş olduğum kodları incelerseniz textbox’ taki metnin istenilen hücreye nasıl yazdırılabileceğini görebilirsiniz. Sanırım sorununuz da excel’ de belirli hücrelere yazdırma işlemi. Aşağıdaki kodlar çalıştırıldığında textbox’ ta bulunan metnin 2.satır 3. sütuna yazdırılmasını sağladım (5. satır).
private void button1_Click(object sender, EventArgs e)
{
Microsoft.Office.Interop.Excel.Application uygulama = new Microsoft.Office.Interop.Excel.Application();
uygulama.Visible = true;
Microsoft.Office.Interop.Excel.Workbook kitap = uygulama.Workbooks.Add(System.Reflection.Missing.Value);
Microsoft.Office.Interop.Excel.Worksheet sayfa1 = (Microsoft.Office.Interop.Excel.Worksheet)kitap.Sheets[1];
Microsoft.Office.Interop.Excel.Range alan = (Microsoft.Office.Interop.Excel.Range)sayfa1.Cells[2, 3];
alan.Value = textBox1.Text;
}
netframework 2 de çalışıyormu acaba çünkü 4 ile yaptım referanslara ekleniyor görünüyor iki de referanslara eklenemiyor bilgi alabilirmiyim.
.Net Framework 4 gerekiyor.
Çok işime yaradı. Teşekkürler.
Ben yaklaşık 2-3 ay önce Access veri tabanlı bir program yazdım.Ve verileri excele aktarmam gerktiği için sizin sitenize baktım.Bu vermiş olduğunuz kodlar ile birlikte datareader kullanılamıyor.@recep’in demek istediği olayda bu sanırsam.
çalışmadı ya bende
Hocam bende bu kodu kullanıyorum saat yazdırdığım zaman görünmüyor.
evet COM bölümünden ekledim ve using kısmına o kod blogunu yazınca tüm kod bloglarımdaki veritabanı bağlantısıyla alakalı kodlar kırmızı renkli altı çizili bir şekil alıyor ve hatalı olarak görüyor…
Neyse Bu sorunumu başka bir kod blogu ile hallettim using kısmına hiç bişi eklemeden,Datagridview dekileri excele aktarabiliyorum,fakat şablonu oluşturulmuş birexcel oluşturdum bunun içine nasıl akatabilirim ? yardımcı olursanız çok sevinirim.
using Excel = Microsoft.Office.Interop.Excel;
using Microsoft.Office.Interop.Excel;
Bu kısmı en üste eklediğimizde access veri tabanına ait bağlantı yapılan tüm kodlar "datatable,dataset ..vs"
çalışmaz hale geliyor ve hata veriyor.Nasıl Düzelte Biiliriz acaba ?
Her hangi bir sorun çıkmaması gerekiyor. Solution explorer penceresinde Reference eklediniz mi?
Reference üzerinde Sağ tık- Add Reference . Sol tarafta COM bölümünden Microsoft Excel 15.0 Object Library.
Visual Studio 2017’de Bilgisayarımda add references kısmında Excel adlı hiçbir veri yok referencese nasıl exceli eklerim ?
Teşekkürler işime yaradı..