none
Bir yaş daha yaşladım (Asp.net projesi, Excell e yazı yazdırma problemi) RRS feed

  • Soru

  • Başlıkta açıkça belirtiyor. Sinirlerimi bile zıplattı (tabiri caizse). İstediğini yazıyor istemediğini inat ediyor. Asp.net projemde excell'e yazı yazdırıyorum. OleDb kullanıyorum. Daha önce sayfalarca excell sayfasına yazı yazdırmama rağmen bazı hücrelere inat ediyor yazmıyor. Çok uzatmadan kodları paylaşayım.

    string hedefDosya = Server.MapPath("~/Uyeler/Dosyalar/" + SessionID + "/" + kursiyerId.ToString() + "ek2.xls");
    
            string sConnectionString = @"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + hedefDosya + "; Extended Properties=Excel 8.0";
            OleDbConnection objConn = new OleDbConnection(sConnectionString);
    
    
    objConn.Open();
    SurucuKursuEntities1 entKurs = new SurucuKursuEntities1();
    OleDbCommand objCmd = new OleDbCommand();
    objCmd.Connection = objConn;
    
    var kursAdi = from bilgi in entKurs.Kurslar where bilgi.KursID == SessionID select bilgi.KursAdi;
    objCmd.CommandText = @"insert into [Sayfa1$A4:A4] values ('" + kursAdi.FirstOrDefault() + "')";
    objCmd.ExecuteNonQuery();

    Hatayı gösterdiği yer son satır. Hata ise : This table contains cells that are outside the range of cells defined in this spreadsheet.

    Normalde A5 e yazdırmak için her zaman bir eksik sayı veriyorsun. A5 e yazdırmak için A4:A4 yazmak gerekiyor. Yanlış sorgu mu kullanıyorum anlamadım ancak projenin farklı yerlerinde benzer işler yaparken sorun olmuyordu bazen böyle sorun çıkıyor yaşlandırıyor adamı. Cevaplar için şimdiden teşekkürler.

    28 Mayıs 2013 Salı 10:22

Tüm Yanıtlar

  • Kodu nereden aldın bilmiyorum ama insert ederken kolonla birlikte satır belirtemiyorsun sanırım. ado.net ilk boş satıra otomatik konumlanıp insert ediyor. Eğer excel sayfanın başında kolon isimleri yoksa, kolon isimleri F1,F2,F3,F4... şeklinde gidiyor, şu şekilde yapabilirsin : 

    string sql = "INSERT INTO [Sheet1$] (F1) VALUES ('"+KursAdi.FirstOrDefault()+"')";

    Yok ille belli bir satıra eklemek istiyorsan, update çalıştırman lazım. Updatede de kolon isimlerin yoksa aynı şekilde F1 F2 ... şeklinde kullanmalısın..


    Burak SARICA

    28 Mayıs 2013 Salı 10:47
  • Belli bir hücreye yazdırmak zorundayım. Bende hata veren kodun bir benzeri şu:

    var kursiyerCuzdanCiltNo = from bilgi in entKursiyer.Kursiyer where bilgi.KursiyerID == kursiyerId select bilgi.NufusCuzCiltNo;
                objCmd.CommandText = "insert into [Sayfa1$F17:F17] values ('" + kursiyerCuzdanCiltNo.FirstOrDefault() + "')";
                objCmd.ExecuteNonQuery();

    Bu sorunsuz çalışıyor tam istediğim yere ekleme yapabiliyor. Ancak ilk paylaştığım yere ekleme yapmıyor. Excell de biçimlendirmelerini aynı yapıyorum iki hücreyi de birebir aynı tipte yapıyorum yine de olmuyor. Kodları yine buralarda bulmuştum.
    28 Mayıs 2013 Salı 11:11
  • Update ile denediniz mi peki? Update [Sayfa1$A4:A4] Set F1='Değer' şeklinde?


    Burak SARICA

    28 Mayıs 2013 Salı 11:46
  • Hocam komut:

    objCmd.CommandText = "Update [Sayfa1$A4:A4] Set F1='Değer'";
                objCmd.ExecuteNonQuery();
    

    sonuç:

    This table contains cells that are outside the range of cells defined in this spreadsheet.

    28 Mayıs 2013 Salı 12:24
  • Sanırım excellin bir sıkıntısı var. excell 2003 kullanıyorum. Bir sayfada bir hücre inatlaştı mı hiçbir şekilde oraya yazı yazdıramıyorsun. Aynı komut başka bir hücreye çok güzel yazdırırken sadece o inatlaşan hücreye hiçbir şekilde yazı yazdıramıyorsun. Üstelik hatada bir üstekinin ifadesi ile karşılaşıyorsun.

    Misal olarak

    TextBox txbIlkSertTarihi = (TextBox)GridView1.Rows[gridRowindex].FindControl("txbIlkSertTarihi");
            objCmd.CommandText = @"insert into " + koordinatIlkSertTarihi + " values ('" + txbIlkSertTarihi.Text + "')";
            objCmd.ExecuteNonQuery();

    koordinatIlkSertTarihi adlı değişken ilk döngüde "[Sayfa1$K7:K7]" değerini alırken ikinci döngüye geldiğinde "[Sayfa1$K8:K8]" değerini alıyor. İlkini yazıyor ikinciye gelince aynen şu hata

    The INSERT INTO statement contains the following unknown field name: '04#06#2013'. Make sure you have typed the name correctly, and try the operation again.

    Burdaki '04#06#2013' bir üst satırda bulunan değer. Ne dediğini de anlamak zor. Sonuç olarak bir kaç yaş yaşladım :D

    Ve neye sinirlendiğini de buldum. Aradaki . işaretlerine kızıyor. Normalde herşey metin durumunda excell e aktarırken tarih olarak mı kopyalamaya çalışıyor, yoksa excell bunu "hımmm bu tarihe benziyor ben de tarih mi yapayım" diyor anlamıyorum. Arada , işareti olunca hiçbir sorun yok. yani bugünün tarihini 4,06,2013 yapınca sorun yok ama 4.06.2013 yapınca problem.


    • Düzenleyen matanist 4 Haziran 2013 Salı 15:56 Ekle
    4 Haziran 2013 Salı 15:01