Excel Otomasyonunda Problem

By | Mart 2, 2011

C# ile excel otomasyonu yapıyorsanız, karşılacabileceğiniz bir takım iyi bilinen problemler olacaktır elbet. Zaten bu yüzden Microsoft firması da kendi makalelerinde kod yoluyla otomatik bir şekilde excel dosyaları üretmeyi önermiyor. tavsiye etmiyor. Ve bu konuda da destek vermiyor. Herhangi bir sorun yaşadığında bunu iletemiyorsun resmi makamlara.. “kardeşim sana kim bunu yapabilirsin dedi ?”  diyorlar haliyle.

 

Şimdi en sık karşılaşılan problemlerden birisi, excel’i örneklerken ki satırda “invalid type or old method” gibi bir hata almanızdır. bunun çözümü gayet basittir. Bunun sebebi office in kültür ayarlarından kaynaklanıyor. Bu sekilde bu nesneyi örneklerken sadece en-US  kültür ayarında çağırma yapmanız gerekiyor malesef. Bu bilinen bir sorundur..

 

dolayısı ile

Microsoft.Office.Interop.Excel._Application xlApp = new Microsoft.Office.Interop.Excel.ApplicationClass();

Microsoft.Office.Interop.Excel.Workbook xlWorkBook;

Microsoft.Office.Interop.Excel.Worksheet xlWorkSheet;

System.Threading.Thread.CurrentThread.CurrentCulture = new System.Globalization.CultureInfo(“en-US”);

xlWorkBook = xlApp.Workbooks.Add(true);

 

işte tam burda workbooks.add methodu çağırılırken o anki thread in kültür ayarını en-US  a çevirmemiz gerekiyor. .Add satırından sonra tekrar eski haline cevirebilirsiniz sıkıntı olmaz.

 

Ancak 2 gündür boğuştuğum başka bir problem vardı benim. Bütün bu sorunları gidermeme rağmen. Kodum çalışırken tam Workbooks.Add kısmına geliyor ve orda kalıyor. ilerlemiyor. hata da vermiyordu. Sunucuya giriyorum bakıyorum kod çalışırken EXCEL.EXE çalışmaya baslıyor. Bunu task manager ‘dan görebiliyorum. ama işlem yapmıyor öylece kalıyor. Daha sonra bayağı bi bekledikten sonra EXCEL.EXE’yi manuel bir şekilde görevi sonlandır dedikten sonra kodum hata veriyor. Hata verdiği satır da tam Workbooks.Add’in olduğu satır.

 

Bu arada bu tip otomasyonlar yapılabilmesi için kodun çalıştığı makinada excel yüklü olması lazım. Benim sunucumda Office 2007 Enterprise yüklüydü. Günlerce uğraştım. Google da belki 2000 tane site gezmişimdir. Ancak sorunu bulamadım bir türlü. Excel exe çalışıyor ama kod ilerlemiyor. Çözümünü bulabilen olmamış. 1 tane aynı sorunla karşılan yabancı bi eleman gördüm. Onun da sorusuna kimse cevap yazmamış zaten.

Aklıma gelen herşeyi denedikten sonra, azmettim ve bütün office versionlarını makinaya kurup denemeye karar verdim.. Ve en sonunda Office 2007 Professional’ı kurdum ve sorun düzeldi. Hepimiz derin bir nefes aldık.

Halbuki Enterprise la gelen ve Professional ile gelen excel.exe lerin Built number ları bile aynı. Dosyalar tamamen aynı. Boyutlarına kadar versionlarına kadar hepsi aynı. Demek olay excel de bitmiyor, arka planda bazı dll lerde farklılıklar var..

Mesela en çok ilgimi çeken Office 2007 Enterprise da MSO.DLL diye birşey YOK. ama Professional da var. Belki de olay ondan kaynaklanıyordur.

Nihayet bütün kodum tekrar çalışıyor. Umarım aynı problemi yaşan kişilere bir kaynak teşkil eder bu yazım.

Kodunuz hiç bir hata vermeden “çalışmamazlık” ediyorsa, office in farklı versionlarını yukleyip test edin derim öncelikle !

Bir cevap yazın

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir