none
C# tan Varolan Excel Dosyasına Veri Aktarımı ? RRS feed

  • Soru

  • Merhaba arkadaşlar c#ta çok ama çok yeniyim o yüzden kusuruma bakmayın şimdi bazı arkadaşlar haklı olarak hiçbirşey bilmeden program yazmaya kalkmışsın diyecekler evet haklılardır. Fahrettin Erdiç'in C# Kİtabını bitiriri bitirmez işyerimde kullanmak için çok küçük bir program yazmak istedim ama 2 gündür kafama ağrılar girdi yapamadım.

    D Klasörümde gunlukprogram.xlsx adında bir excel dosyam var ve bu excel dosyasının içinde kendi hazırladığım bir tablo var 3 sütun 8 satırlık ufak birşey en büyük sorunuma gelince c#ta hazırladığım form uygulamasında 10 tane textbox 1 datetimepicker 1 tanede buton var. Textboxları doldurup excele aktar dediğimde d klasörümde bulunan excel dosyasının içine yazdırması lazım ama ben nedense 2 gündür bu işi yapamadım. Bilen arkadaşlardan ricam yardımcı olmaları yoksa yolun başında ben c# işini bırakacağım :(

    Kodlar İse Aşağıdaki Gibi arkadaşlar burada bir sorun daha var hem gunlukprogram.xlsx açılıyor hemde yeni sıfır bir excel sayfası açılıyor.

    using System;
    using System.Collections.Generic;
    using System.ComponentModel;
    using System.Data;
    using System.Drawing;
    using System.Linq;
    using System.Text;
    using System.Threading.Tasks;
    using System.Windows.Forms;
    using Excel = Microsoft.Office.Interop.Excel;

    namespace Randevu_Programı_1
    {
        public partial class Form1 : Form
        {
            public Form1()
            {
                InitializeComponent();
            }

            private void button1_Click(object sender, EventArgs e)
            {

                dynamic xl = new Microsoft.Office.Interop.Excel.Application();
                xl.WorkBooks.Open("D:\\gunlukprogram.xlsx");
                xl.Visible = true;

                Microsoft.Office.Interop.Excel.Workbook kitap = xl.Workbooks.Add(System.Reflection.Missing.Value);

                Microsoft.Office.Interop.Excel.Worksheet sayfa1 = (Excel.Worksheet)kitap.Sheets[1];

                Microsoft.Office.Interop.Excel.Range alan = (Microsoft.Office.Interop.Excel.Range)sayfa1.Cells[1, 1];
                Microsoft.Office.Interop.Excel.Range alan1 = (Microsoft.Office.Interop.Excel.Range)sayfa1.Cells[2, 1];

                alan.Value2 = textBox1.Text;
                alan1.Value2 = dateTimePicker1.Text;

            }
        }
    }

    18 Mayıs 2016 Çarşamba 12:10

Yanıtlar

  • Var olan bir dosyayi neden acman gerektigini anlamadim. Sifirdan yaparak:

    void Main()
    {
    	// Formdaki textboxlardan gelen veriyi taklit etmek icin
    	List<Data> data = new List<Data> {
    		new Data { SiraNo=1, Saat="Saat:14:00", Neden="Ziyaret"},
    		new Data { SiraNo=2, Saat="Saat:15:00", Neden="Ziyaret 2"},
    		new Data { SiraNo=3, Saat="Saat:16:00", Neden="Ziyaret 3"},
    		new Data { SiraNo=4, Saat="Saat:17:00", Neden="Ziyaret 4"},
    	};
    	// Datetimepickerdan gelen veri icin
    	var tarih = DateTime.Now;
    
    	// Excel dosya yarat
    	Microsoft.Office.Interop.Excel.Application xl = new Microsoft.Office.Interop.Excel.Application();
    	var workbook = xl.Workbooks.Add();
    	xl.Visible = true;
    
    	Worksheet sht = ((Worksheet)workbook.ActiveSheet);
    
    	((Range)sht.Cells[1, 1]).Value = tarih.ToLongDateString();
    	((Range)sht.Range[(Range)sht.Cells[1, 1], (Range)sht.Cells[1, 3]]).Cells.Merge();
    
    	for (int i = 0; i < data.Count(); i++)
    	{
    		//i + 1 + 1 cunku Excel 1'den basliyor +1, ilk satirda tarih var +1
    		
    		((Range)sht.Cells[i + 1 + 1, 1]).Value = data[i].SiraNo + ")"; // 1), 2) ...
    		((Range)sht.Cells[i + 1 + 1, 2]).Value = data[i].Saat;
    		((Range)sht.Cells[i + 1 + 1, 3]).Value = data[i].Neden;
    	}
    }
    
    public class Data
    { 
      public int SiraNo { get; set; }
      public string Saat { get; set; }
      public string Neden { get; set; }
    }

    18 Mayıs 2016 Çarşamba 13:06
    Yanıtlayıcı

Tüm Yanıtlar

  • Senin kadar yeni baslayip da, caba gosteren, deneyen ve sonunda halledemediginde soran ve bununla da kalmayip, sanki uzun suredir soru soruyormus gibi sorusunu boyle anlatan az bulunuyor. Cevap verenlerin yardim etmekten zevk aldigi bir durum bu.

    Yeni basladiktan sonra isin icine, bir baska boyut olan Excel otomasyonunu da katmissin :) Guzel, hic sorun yok ama unutma, Excel otomasyonu C# disinda Excel VBA hakimiyeti de gerektiriyor. Kodun oldukca eski bir stilde yazilmis. Oncelikle kod yazmani kolaylastirabilirsin, Excelin opsiyonel degerleri icin "System.Reflection.Missing.Value" kullanmana gerek yok.

    Soruna dogrudan kodla cevap vermek isterdim ama bazi eksikler var. Form'da onca textbox varken, koda gore sadece A1 ve A2 alanlarina deger yazdiriyorsun (textbox1.Text ve dateTimePicker1.Text). Bu kismini anlayamadim, neden sadece 2 yeri degistiriyorsun, yani daha dogrusu bu yapamadigin kisim sanirim ama tam olarak yapmak istedigin ne?

    .Open( "d:\\gunlukprogram.xlsx" )

    seklinde var olan bir dosyayi acip onu degistiriyorsun. Yapmak istedigin gercekten o mu? Yoksa o dosyayi sablon olarak kullanip yeni bir dosya yaratmak mi?

    Simdilik, son olarak, Excel otomasyonu yerine Codeplex'teki Epplus kutuphanesini kullanabilirsin (tabii onu ogrenmek dert olabilir de). Ya da ihtiyacina gore asil gerekli olan Excel otomasyonu olmayabilir de (belki de exceldeki hazir bolum bir tablo seklindedir ve dogrudan ADO.Net ile guncellenebilir). 


    18 Mayıs 2016 Çarşamba 12:31
    Yanıtlayıcı
  • Çetin abi ben emeklemeyi öğrenmeden koşmaya çalışan biriyim ve bu büyük hata biliyorum elimdeki kitapları bitirip bir sürü uygulama yaptıktan sonra bu işlere girmem lazım dı ama acelecilik hırs ve kafaya taktığım bir şeyi illaki yapma mevzularından dolayı 2 gündür kafam ağrımakta

    Kısacası şu abi D içinde bulunan excel dosyasının içine ben textboxtaki verileri yazdıracağım tek istediğim bu başka hiçbirşey istemiyorum.

    Uygulamayı youtube üzerinden c# anlatan bir arkadaşın videosundan öğrendim ve dediğin gibi sadece A1 ve A2 alanlarına kod yazdım. Excel dosyasını açabilseydim eğer devamı gelecekti ama dosyayı açamadığım için küplere bindim.

    Textboxa girilen veriler gunlukprogram.xlsx içindeki bu tabloya yerleşecek. Word ve excelden anlamayan bir arkadaşım için ufacık bi program yaayım dedim ama sanırım elime yüzüme bulaştırdım.

    18 Mayıs 2016 Çarşamba 12:43
  • Var olan bir dosyayi neden acman gerektigini anlamadim. Sifirdan yaparak:

    void Main()
    {
    	// Formdaki textboxlardan gelen veriyi taklit etmek icin
    	List<Data> data = new List<Data> {
    		new Data { SiraNo=1, Saat="Saat:14:00", Neden="Ziyaret"},
    		new Data { SiraNo=2, Saat="Saat:15:00", Neden="Ziyaret 2"},
    		new Data { SiraNo=3, Saat="Saat:16:00", Neden="Ziyaret 3"},
    		new Data { SiraNo=4, Saat="Saat:17:00", Neden="Ziyaret 4"},
    	};
    	// Datetimepickerdan gelen veri icin
    	var tarih = DateTime.Now;
    
    	// Excel dosya yarat
    	Microsoft.Office.Interop.Excel.Application xl = new Microsoft.Office.Interop.Excel.Application();
    	var workbook = xl.Workbooks.Add();
    	xl.Visible = true;
    
    	Worksheet sht = ((Worksheet)workbook.ActiveSheet);
    
    	((Range)sht.Cells[1, 1]).Value = tarih.ToLongDateString();
    	((Range)sht.Range[(Range)sht.Cells[1, 1], (Range)sht.Cells[1, 3]]).Cells.Merge();
    
    	for (int i = 0; i < data.Count(); i++)
    	{
    		//i + 1 + 1 cunku Excel 1'den basliyor +1, ilk satirda tarih var +1
    		
    		((Range)sht.Cells[i + 1 + 1, 1]).Value = data[i].SiraNo + ")"; // 1), 2) ...
    		((Range)sht.Cells[i + 1 + 1, 2]).Value = data[i].Saat;
    		((Range)sht.Cells[i + 1 + 1, 3]).Value = data[i].Neden;
    	}
    }
    
    public class Data
    { 
      public int SiraNo { get; set; }
      public string Saat { get; set; }
      public string Neden { get; set; }
    }

    18 Mayıs 2016 Çarşamba 13:06
    Yanıtlayıcı
  • Çetin abi o gunlukprogram.xlsx dosyası hep D sürücüsünde kalacak sabit şablon gibi ben textboxları doldurup excele aktar dediğimde o excel dosyasına yazdıracak ve oradan çıktı alacağız. O tablo biraz daha süslü hale gelecek bizim belediyenin logosunu filan ekleyeceğim yani o tasarım sabit olacak. Şimdi ben her excele aktar dediğimde yeni bir excel dosyası yaratacak ve orada tasarım şablon filan olmayacak ?
    18 Mayıs 2016 Çarşamba 13:10
  • Hayir sablon kullanabilirsin. Tek degisen. .Add() yerine:

    var workbook = xl.Workbooks.Add(@"d:\Gunlukprogram.xlsx");

    18 Mayıs 2016 Çarşamba 13:40
    Yanıtlayıcı
  • Ben yine yapamadım bu işi çetin abi çözemedim hiçbirşeyi ve pes ediyorum. C# maceram başlamadan sona erdi, herkese teşekkür ederim... 
    18 Mayıs 2016 Çarşamba 14:57