Merhaba,
Excel'den veri alabilmek için öncelikle proje referanslarına aşağıdaki iki .net kütüphanesini eklememiz gerekiyor.
- Microsoft.Office.Core
- Microsoft.Office.Interop.Excel
Bu iki kütüphaneyi ekledikten sonra artık excel'e ulaşabilir hale gelmiş oluyoruz.
Excel'i çağırmak istediğimiz class'ın olduğu dosyanın başında gerekli namespace'i import edelim.
- using Excel = Microsoft.Office.Interop.Excel;
Şimdi mesela bir excel dosyasının içindeki ilk sayfadan veri okumak istiyoruz diyelim. Şöyle bir kod yazmamız yeterli.
Excel.Application xlApp;
Excel.Workbook xlWorkBook;
Excel.Worksheet xlWorkSheet;
object misValue = System.Reflection.Missing.Value;
xlApp = new Excel.ApplicationClass();
xlWorkBook = xlApp.Workbooks.Open(@"C:\files\2010.xls", 0, true, 5, "", "", true, Microsoft.Office.Interop.Excel.XlPlatform.xlWindows, "\t", false, false, 0, true, 1, 0);
xlWorkSheet = (Excel.Worksheet)xlWorkBook.Worksheets.get_Item(1);
string ProductCode = ((Excel.Range)xlWorkSheet.Cells[1, 1]).Value2.ToString();
xlWorkBook.Close(true, misValue, misValue);
xlApp.Quit();
releaseObject(xlWorkSheet);
releaseObject(xlWorkBook);
releaseObject(xlApp);
Tabii bu kodun çalışabilmesi için bir de releaseObject fonksiyonu lazım, onu da paylaşayım hemen
private void releaseObject(object obj)
{
try
{
System.Runtime.InteropServices.Marshal.ReleaseComObject(obj);
obj = null;
}
catch (Exception ex)
{
obj = null;
&n
bsp; MessageBox.Show("Objeyi bırakamıyorum! " + ex.ToString());
}
finally
{
GC.Collect();
}
}
Peki, excel ile çalışmak için gerken kod tamam. Ancak derlediniz ve çalışmadığını gördünüz. Sanırım şöyle bir hata alıyorsunuz
{"Old format or invalid type library. (Exception from HRESULT: 0x80028018 (TYPE_E_INVDATAREAD))"}
Bu hata'nın neden kaynaklandığını da araştırırsanız, sorunun Excel 11.0 kütüphanesinin Culture ayarlarının US olmaması durumunda hata verdiğini öğrenebilirsiniz. Yani Excel kütüphanesinde hata var.
Peki bu hatayı nasıl aşacağız? Çok basit. Excel için çalışacak kodun başına aşağıdaki komutları yazarak, hem bilgisayarımızın Culture ayarının yedeğini alır hem de excel çalışabilsin diye US'e ayarlarız.
System.Globalization.CultureInfo oldCI = System.Threading.Thread.CurrentThread.CurrentCulture;
System.Threading.Thread.CurrentThread.CurrentCulture = new System.Globalization.CultureInfo("en-US");
Kodun sonuna ise aşağıdak kodu yazarak tekrar bilgisayarın kendi Culture ayarlarına geri dönebiliriz.
System.Threading.Thread.CurrentThread.CurrentCulture = oldCI;
Bu kadar. Eğer dosya adını doğru yazdıysanız ve okumaya çalıştığınız hücrede bir değer varsa alırsınız.
İyi çalışmalar dilerim!