Konuyu görüntüle
IUCODERS FORUM > Programlama > .NET > Exceldeki verileri datatable a aktarma
Yazar
sevecen


avatar
adana istanbul
Kayıt: 08.02.2006
10.04.2008-12:07 #41842
DataTable dtEXCEL = new DataTable();

         DataTable dtNAME = oleConn.GetOleDbSchemaTable(OleDbSchemaGuid.Tables, _obj);

            OleDbDataAdapter adp;

            if (dtNAME.Rows.Count > 0)
            {
                adp = new OleDbDataAdapter("Select * From [" + dtNAME.Rows[0]["TABLE_NAME"].ToString() + "]", oleConn);
                adp.Fill(dtEXCEL);
            }



Başlığı düzgün bir şekilde okuyor. Ama diğer verileri eksik okuyor. 4 kayıttan ilk ikisinin ilk 2 kolonunu okuyamıyor. Bunlar normal string alanlar. TArihleri de yanlış okuyor. 03.01.1990'ı 30684 yapmış vs.

Durum acil olduğu için fazla araştırmadan buraya yazdım. Yardımlarınızı bekliyorum.

Kolay gelsin.






bize ruyalarimizin degil uyanikligimizin tabiri gerek (Alinti)





Yazar
mmt


avatar

Kayıt: 22.01.2006
10.04.2008-13:50 #41850
http://aspnet.4guysfromrolla.com/articles/032608-1.aspx

burada anlatıyor ayrıntılı olarak, projenin zip dosyası da var altta onu da indirip inceleyebilirsin.

tarihleri yanlış çevirmesinin nedeni sanırım excelde o hücrenin formatının "genel" olarak ayarlanmasından kaynaklanıyor, tam emin değilim ama o hücreleri "tarih" olarak ayarlayıp bir dene istersen.





Yazar
aliprinter


avatar
İstanbul
Kayıt: 12.02.2006
10.04.2008-15:34 #41869
Kodunda bir problem gözükmüyor.
İlk 2 satırın ilk 2 sütununu okuyamasının nedenini tam olarak bilemiyorum sütun dizilişinden ya da format bozukluğundan kaynaklanabilir.

Ancak tarih alanlarının yanlış çıkması anladığım kadarıyla tarih bilgisinin sayı olarak saklanmasından kaynaklanıyor. Yani tarih ya da genel olarak ayalasan bile koddan çekerken bu sayıyı alıyor. Excel'den bunu düzeltmenin yolunu bilmiyorum açıkcası ama C#'tan bu sayı formatını normal tarih formatına çevirmek için aşağıdaki gibi bir yöntem kullanabilirsin:

Mesela 39295 = 01.08.2007'ye denk geliyor.

DateTime dtTarih = System.DateTime.FromOADate(39295); ;





Yazar
sevecen


avatar
adana istanbul
Kayıt: 08.02.2006
15.04.2008-13:55 #42646
Teşekkür ederim.





bize ruyalarimizin degil uyanikligimizin tabiri gerek (Alinti)





Yazar
sevecen


avatar
adana istanbul
Kayıt: 08.02.2006
18.04.2008-13:53 #42879
Konu yakın olduğu için yeni başlık açmadım. Zira bugünlerde çok soru soruyorum blushing

Bu excel dosyasının kaydetmeden nasıl datatable a aktarırım?

Öyle durumda connection string kullanır mıyım?
Kullanırsam nasıl olur?

string con = "Provider=Microsoft.Jet.OLEDB.4.0;" +
                 "Data Source=" + Server.MapPath("../") + "DB\deneme.xls;" +
                 "Extended Properties=Excel 8.0;"; 






bize ruyalarimizin degil uyanikligimizin tabiri gerek (Alinti)





Yazar
aliprinter


avatar
İstanbul
Kayıt: 12.02.2006
18.04.2008-15:50 #42884
private DataTable getDataFromXLS(string strFilePath)
{
try
{
string con = @"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + strFilePath + @";Extended Properties=""Excel 8.0;HDR=Yes;IMEX=1""";
OleDbConnection  xlscon =new OleDbConnection (con);
xlscon.Open();
OleDbCommand  xlscmd = new OleDbCommand (@"SELECT * FROM [Kitap1$]", xlscon);
OleDbDataAdapter xlsda = new OleDbDataAdapter();
xlsda.SelectCommand  = xlscmd;
DataTable xlsdt = new DataTable (); 
xlsda.Fill(xlsdt);
xlscon.Close();
xlsda = null;
return xlsdt;
}
catch(Exception ex)
{
return null;
}
finally
{}
}


Basitçe Exceldeki verileri datatable'a aktarıp geri döndüren bir fonksiyon. Ama şu linkte daha ayrıntılı şekilde (range belirterek vs.) aktarmadan bahsetmiş bunu da bir kontrol et. peace
http://blogs.vbcity.com/hotdog/archive/2006/01/12/5777.aspx





Yazar
sevecen


avatar
adana istanbul
Kayıt: 08.02.2006
19.04.2008-13:23 #42962
aliprinter teşekkür ederim.
Fakat bu yolla excel dosyası kaydedilmek zorunda kalmayacak mı?
strFilePath için ne yazacağım?





bize ruyalarimizin degil uyanikligimizin tabiri gerek (Alinti)





Yazar
aliprinter


avatar
İstanbul
Kayıt: 12.02.2006
19.04.2008-14:04 #42971
DataTable veritabanından bağımsız çalışır. DataTable üzerinde değişiklik yapmayıp DataAdapter'da Update yapmadığın sürece Excel tablonda bir değişiklik olmaz zaten benim bildiğim kadarıyla. O yüzden connection stringde bir değişiklik olmasına da gerek yok. Datatable'a aldığın verileri başka bir veritabanına aktarırsın bu şekilde üzerinde değişiklik yapmadan.
Ancak connectionString üzerinde;
string con = @"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + strFilePath + @";Extended Properties=""Excel 8.0;HDR=Yes;IMEX=1;Mode=ReadOnly""";
kırmızı ile yazılı Mode=ReadOnly parametresini eklersen bağlantı yalnızca okunabilir modda açılmış olur. Senin istediğin de böyle birşey anladığım kadarıyla.





Yazar
sevecen


avatar
adana istanbul
Kayıt: 08.02.2006
21.04.2008-18:07 #43087
Excel dosyasını kaydetmeden datatable'a aktarmaya çalıştığımda "Başlatma dizesi biçimi OLE DB belirtimine uymuyor. " hatasını alıyorum bu seferde.

 string strConn = @"Provider=Microsoft.Jet.OLEDB.4.0;" +
                 "Data Source=" + excelPost + "@;" +
                 "Extended Properties=Excel 8.0;Mode=ReadOnly";

        OleDbConnection oleConn = new OleDbConnection(strConn);
        oleConn.Open();
        object[] _obj = new object[] { null, null, null, "TABLE" };

        DataTable dtNAME = oleConn.GetOleDbSchemaTable(OleDbSchemaGuid.Tables, _obj);






bize ruyalarimizin degil uyanikligimizin tabiri gerek (Alinti)





Yazar
sevecen


avatar
adana istanbul
Kayıt: 08.02.2006
21.04.2008-18:30 #43088
Mode=Readonly yazmayınca da bu hatayı alıyorum.
"Güncelleştirilemiyor. Veritabanı veya nesne salt okunur."





bize ruyalarimizin degil uyanikligimizin tabiri gerek (Alinti)





Yazar
aliprinter


avatar
İstanbul
Kayıt: 12.02.2006
21.04.2008-22:42 #43100
string strConn = @"Provider=Microsoft.Jet.OLEDB.4.0;" +
"Data Source=" + excelPost + "@;" +
"Extended Properties=Excel 8.0;Mode=ReadOnly";

Kırmızı olan yerlerde içerik hataları var. Aşağıdaki gibi olmalı:
string strConn = @"Provider=Microsoft.Jet.OLEDB.4.0;" +
                @"Data Source=" + excelPost + ";" +
                @"Extended Properties=""Excel 8.0;Mode=ReadOnly""";






Del.icio.us
Digg
Facebook
Furl
Google
Blink
Simpy
Spurl
Y! MyWeb