En iyi yanıtlayıcılar
C# tan Varolan Excel Dosyasına Veri Aktarımı ?

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;
}
}
}
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; } }
- Yanıt Olarak İşaretleyen Kyamuran SalibryamMicrosoft contingent staff, Moderator 20 Mayıs 2016 Cuma 09:16
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).
-
Ç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.
-
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; } }
- Yanıt Olarak İşaretleyen Kyamuran SalibryamMicrosoft contingent staff, Moderator 20 Mayıs 2016 Cuma 09:16
-
Ç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 ?
-
-