Excel otomasyonunda problem !

by eMRe 2. Mart 2011 20:24

excel icon excel exel egzel

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 !

 

FacebookDigg It!DZone It!StumbleUponTechnoratiRedditDel.icio.usNewsVineFurlBlinkList

Etiketler: , , , , ,

Programlama

İstanbulda C# ve C++ için özel ders ...

by eMRe 19. Kasım 2010 19:07

Herkese selamlar, bir kaç gündür hiç bir şey yazamadığımın farkındayım, bir bilişim akademisinde c# eğitmenliği de yapmaya başladığım için bayram boyunca tüm vaktimi aldı. 

Buradan şunu duyurmak istiyorum, benden  bay/bayan farketmeksizin, başlangıç seviyesinde C# için özel ders alabilirsiniz. Belki kişisel gelişim için öğrenmek istiyorsunuzdur, belki de sadece üniversitede ilgili dersin sınavından geçmek için belli bir konuyu pekiştirmek istiyorsunuzdur. Belki de C# üzerine ödeviniz vardır bu konuda yardım istiyorsunuzdur. Kapım herkese açık. C# için özel ders almak, kursa gitmekten çok daha ucuza gelmektedir. Ve daha verimli olmaktadır. Özellikle yeni başlayan biri için, ve pratik şeyler öğrenmek isteyen biri için; kurslarda kendisine lazım olmayacak bir çok şey öğretilmeye çalışılmaktadır. Burda kursun bir hatası söz konusu değil, hangi öğrenciye göre müfredat belirlesinler ?  

Örneğin siz kendi çapınızda basit asp.net siteleri geliştirmek istiyorsunuzdur ve bunun pratik yolunu öğrenmek istiyorsunuzdur. Kursa gittiğinizde size class'lardan başlayacaklar Reflection'a kadar anlatacaklar,  ondan sonra asp.net e gececeksiniz. Ben ise sizlere işin pratik yolunu, "bak dostum boyle yapmak istiyorsan şurdan şuraya tıklıyorsun oluyor" şeklinde de gösterebilirim, nasıl olduğu, niye olduğu sizin için önemli olmayabilir. Bu tamamen benden talep edeceğiniz dersin müfredatına göre değişmekte. Siz nasıl bir anlatım arzu ederseniz o şekilde anlatılacaktır. Aynı zamanda üniversitede okuyup da C/C++ dersi alan ve "off yaa ben hiç bişe anlamıyorum bundan" diyenlere de seve seve yardımcı olurum. 

Dersler İstanbul'da verilecektir. Mekan seçimi ise karşılıklı görüşülerek karar verilecektir. 

 

Herhangi bir talepte bulunmak için lütfen menü'deki İletişim sekmesini kullanınız.

İlginize şimdiden teşekkür ediyorum. Görüşmek üzere..

FacebookDigg It!DZone It!StumbleUponTechnoratiRedditDel.icio.usNewsVineFurlBlinkList

Etiketler: , , , , , , ,

Genel | Programlama

C# : Asp.net sayfalarındaki türkçe karakter sorununu çözmek

by eMRe 9. Ocak 2010 13:57

c sharp

Geçenlerde bir site kodlarken daha önce hiç yaşamadığım halde sunucumda türkçe karakter sorunları yaşamaya başladım.. Sayfaların karakter kodlaması ile hiç oynamadan  bunun üstesinden gelmek mümkün.

Web.config dosyanızda system.web boğumunun altına

bu satırları eklediğiniz zaman, türkçe karakter sorununuz ortadan kalkacaktır.

Saygılar..

FacebookDigg It!DZone It!StumbleUponTechnoratiRedditDel.icio.usNewsVineFurlBlinkList

Etiketler: , , , , , , ,

Programlama

C# Nedir, Ne Değildir , Nasıl Çalışır ?

by eMRe 18. Aralık 2009 13:31

csharp nedir ne degildir
Tekrar merhaba, dünkü yazımda programlama dillerinin tiplerinden ve c# ın bu tipler arasında nasıl bir konumda olduğuna değindik.Şimdide C#'ın yapısından bahsedelim.

Öncelikle C# dediğimiz dil, bir .NET dil ailesine mensup dildir. Ve sadece .NET FrameWork yüklü olan bilgisayarlarda çalışır. .NET ile programlama yapabilmek için .NET'e uyarlanmış 60dan fazla dil vardır ve bunlar kullanılabilir. İşin güzel kısmı C# kodlarken dilerseniz Visual Basic ya da J# kütüphanelerini referans ederek onların methodlarını da kullanabilirsiniz.

C# ile yazılmış bir uygulamayı derlediğinizde oluşan exe bildigimiz exe'lere benzemez. Bildigimiz win32 exelerinin içinde bytecode bulunur, binary, yani makinanın anlayacağı ama insanın anlayamacağı kodlar bulunur. Ve bunlara kısaca PE yani Portable Executable derler. Çünkü çalışmak için işletim sisteminden başka hiç birşeye ihtiyac duymazlar. Ancak .NET ile oluşturduğunuz exe'ler PE olmazlar. .NET exesi diyebiliriz onlara. Bu exelerin içinde bytecode bulunmaz. Onun yerine MSIL ( MicroSoft Intercommon Language ) . Yani turkce izah edecek olursak ortak dil anlamına gelmektedir. Bu çok güzel birşeydir. Bir program yazdığımızı düşünelim. Bir button var tıklayınca ekrana merhaba yazısı geliyor. Bu programı isterseniz 10 farklı .net dilinde ayrı ayrı yazıp exelere cevirin. Bu exelerin içinde oluşan MSIL kodları tıpatıp aynı olacaktır.

 

 

İşte burda .NET FrameWork devreye giriyor. bir .net exe'sine çift tıkladığınızda .net framework devreye girer o exenin içindeki MSIL kodlarını okur ve bilgisayarın anlıyacağı hale cevirir ve program ile hardware arasında bir köprü oluşturur. Bu davranış biçimine JIT yani Just In Time compiler  denmektedir. Yani bir nevi siz her exe yi tıkladığınızda anlık olarak o ana mahsus arka planda compile (derleniyor) ediliyor ve çalıştırılıyor. Sanki yazdığınız program işletim sistemi üzerinde değil de .net framework üzerinde çalışıyormuş gibi oluyor. Dolayısı ile eğer exe nizin çalışacağı bilgisayarlarda .net framework kuruluysa acaba kullanıcının bilgisayarında hangi işletim sistemi var diye dert etmenize gerek kalmamaktadır.

 

Linux altında c# uygulamaları çalıştırmak mümkün. Ancak windowstaki kadar başarılı ve performanslı olmamaktadır. Mono adlı bir proje mevcut. Eger linux makinanıza mono kurarsanız daha sonra komut satırından "mono programınismi.exe" şeklinde komut vererek ilgili exe'yi mono üzerinden çalıştırabilirsiniz.

Aynı şekilde apache server için yazılmış lib-mono da bulunmaktadıır. Bu şekilde linux tabanlı sunucunuz uzerinde çalışan Apache altında asp.net sayfalarınıda çalıştırmanız bir yere kadar mümkün olabiliyor. Bunu şahsen denemiştim. Php ler ve aspx ler aynı klasör altında kardeş kardeş çalışıyorlardı. Çok huzurlu bir ortamdı:)

 

Özetleyecek olursak, .net dillerini kıyaslanamaz. Yok VB.NET daha guclu, yok J# daha guclu yok C# hepsini döver. gibi laflar çok anlamsız, çünkü sonuçta derlendiklerinde hepsi aynı MSIL kodları kullanılarak hazırlanılıyor. Diagrama da bakarsanız daha rahat anlarsınız, hangi dilde yazarsanız yazın, öyle yada böyle hepsi MSIL koduna dönüşüp ordan JIT'e geçiyor ve ordan da makina diline dönüşüyor. Her birinin syntax ı ve grameri farklı, Siz hangisinde kendinizi rahat hissediyorsanız onda geliştirin derim kendinizi. Ben neden c# ı tercih ettim ? Çünkü .net'in resmi dili olduğu için, populer olduğu için, kaynak sıkıntısı çekmediğim için, ismi havalı olduğu için :)

FacebookDigg It!DZone It!StumbleUponTechnoratiRedditDel.icio.usNewsVineFurlBlinkList

Etiketler: , , , , , , , ,

Bilgisayar | Programlama

Programlama Dilleri ve C#

by eMRe 17. Aralık 2009 12:05

c sharp a giris

Herkese tekrar merhaba, bazı yazılarıma aldığım yorumlar ve iletişim kutusundan gelen mesajlardan anladığım kadarıyla, C# öğrenmeye meraklı bir kitle mevcut. Blogumu takip eden kişilerin de hali hazırda C# bilmeyen, ancak öğrenmek için can atan kişiler olduğunu anlamış bulunmaktayım. Madem C# konusunda kendinizi geliştirmek istiyorsunuz, madem blogumu takip ediyorsunuz. Bende elimden geldiğince sizlerle bildiklerimi paylaşıp, yardımcı olmaya çalışacağım. Aklınıza takılan her soruyu "yorum" yazmak koşulu ile sorabilirsiniz. Yorum yazmaya yöneltmemin sebebi, biz burda bilgi paylaşmaya çalışıyoruz, mümkün olduğunca insanın sorunlarına çözüm üretmeye çalışıyoruz. Siz sorularınızı yorum yazarak sorarsanız ve bende bunları aynı sekilde cevaplarsam, bu soru ve cevaplar halka açık olmuş olur. Ve yazdığım yazılar çok daha eğitici olmuş olur.

C# 'a giriş yapmadan önce belirtmek istediğim bir kaç şey daha var. Bu blogu C# konusunda uzman olan kişilerde elbet bir gün rastgelip ziyaret edeceklerdir. Onlara sesleniyorum ; burada anlattığım ve anlatacağım şeyler sokaktan geçen insanın anlayabileceği bir lisanla anlatılacaktır. Ve başlangıç seviyesinde bilinmesi gerekli olmayan bilgileri şimdiden paylaşarak insanların aklını karıştırmak, C#'tan ürkütmek istemiyorum. Amacım burda profesyonel coder'lar yetiştirmek değildir. İnsanlara c# 'ı sevdirip, basit eglenceli kısımlarını gösterip, c# a ısınmalarını saglamaktır. O yüzden makalelerimi değerlendirirken bu çerçevede değerlendirirseniz çok sevinirim.

C# Nedir ?

C# bir bilgisayar programlama dilidir :) Peki ya bilgisayar programlama dili nedir ? Ne işe yarar ? Programlama dünyasına uzak ama bu dünyaya dahil olmak isteyen kişileri de aydınlatacak seviyedeki bir noktadan giriş yapmak en doğrusu olacaktır.

Evet önce sadece bir toz bulutuyduk:) Bu toz bulutunun yogunlasmasıyla dunyamız meydana geldi, bir kaç jeolojik devri atlattıktan sonra biz çıkı verdik. İnsanların sonsuz istekleri ve hayatlarını kolaylaştırma arzusu teknolojiy, ve ardından da bilgisayarı doğurdu. Ancak bu bilgisayarlar çok aptal cihazlardı. Aptal ama bir o kadar da itaatkar. Hemde extreme derecede itaatkar. Çünkü siz sadece ne derseniz onu yapıyorlar. Ne eksik, ne fazla. Tıpkı bir bebeğe ne yapması gerektiğini tarif ederken herseyi adım adım anlatmak zorunda oldugunuz gibi. Yerde oturan bir bebeğe "ayağa kalk" dediğinizde sizi belkide anlamayacaktır. Önce ona ayakta durmak nedir, ayağa nasıl kalkılır, niye kalkılır öğretmeniz gerekecek. İşte bilgisayarlarda bu durumdan farksız değildir. Yapmaları gereken şeyi harfiyen ve en ince detayına kadar eksiksiz söylemeniz lazım ki sizi anlasın ve dediğinizi yerine getirsin. İşte bilgisayarlara bu dediklerimizi anlatabilmek için programlama dilleri icat edilmiştir. Bu dilleri kullanarak bilgisayarlara istediğimiz komutu, emri verebiliriz, tabi bu emirleri o dilin gramer kurallarına uygun bir şekilde nazikçe vermeniz gereklidir.

Programlama dillerindeki komutlar yada anahtar kelimeler yada hazır fonksion isimleri genelde ingilizcedir. Genel kültür olsun diye söylüyorum ; bütün programlama dilleri ingilizce değildir. Mesela Rapira, diğer adıyla Soviet++ tamamen rusçadır ve kiril alfabesiyle kodlanır. Eğitim amaçlı bir programlama dilidir.

C#'ın yerini algılayabilmek için önce öğrenmemiz gereken birkaç şey daha var. Bunlar da her programlama dilinin gücünün, esnekliğinin, ve amacının farklı olduğu gerçekleridir. Piyasada birçok programlama dili mevcuttur sayısı 1000'i rahat bulur belki de geçer. Ve hepsinin de yaratılış amacı farklıdır. Gördüğünüz gibi sırf eğitim amaçlı bir programlama dili çıkartmışlar Soviet++. Keşke bizim türkler de çıkarsa da programlamaya baslamadan önce ingilizce alt yapı gerekmese.

Şimdilik aklıma geldiği kadarıyla size programala dili türlerini sıralayacağım : Functional Programming , Structured Programming , Logical Programming , Object Oriented Programming ve Esoteric Programming dilleri.

Daha önce de söylemiş olduğum üzere 1000küsür tane olan programlama dilleri genelde bu 5 tipe mensuptur. Tabi programlama dili tipleri daha çok didiklenirse daha farklı kategorilere de ayrılabilir. Sunucu Tabanlı programlama dilleri, Masaüstü Programlama Dilleri , sistem programlama, kabuk programlama , network programlama gibi.. Gruplamayı ne amaçlı yaptığınıza göre değişir. Az önceki gruplama kullanım alanlarına göre yapılan bir gruplamaydı. İlk yaptığım gruplama ise programlama dilinin yapısına bakılarak yapılan bir gruplamaydı. Bir de yine çok kullanılan bir gruplama mevcut . o da bir dilin insan diline mi yoksa makina diline mi daha yakın olduğuna bakarak yapılan gruplamadır.

Bu gruplama da "Düşük Seviye - Orta Seviye - Yüksek Seviye"  şeklinde yapılır. Bir program yazarken kullandığınız programlama dili, insan konusma diline ne kadar yakınsa seviye o kadar yüksek olmuş olur. Makina diline ne kadar yakınsa o kadar düşük seviye olmuş olur.

Düşük seviyeli dillere örnek olarak  : Assembly dilini verebiliriz. Kodlarına baktığınız zaman pek birşey anlamanız mumkun olmaz. Bilen kişi tabiki anlar, ama benim burda demek istediğim şey, OKUNABİLİRLİĞİ düşüktür.

Örnek Kod :

intaddr equ 1ch*4    
segaddr equ 62h*4      
mfactor equ 17478    
whozat    equ 1234h    
color    equ 14h          

İşte size düşük seviyeli bir programlama dili :) bakınca insanın gözü korkuyor zaten :)

Birde orta seviyeli diller var. Mesela C dili. Bu dil orta seviye olduğu için hem düşük seviyenin gücüne sahiptir hemde yüksek seviyenin kolaylıklarını okunabilirliğini barındırır.

if(initmouse()==0)
 {
  closegraph();
  restorecrtmode();
  printf("
Mouse driver not loded");
  exit(1);
  }

gördüğünüz gibi komutlar felan bildiginiz ingilizce kelimelerden oluşuyor. İngilizce bilen biri şu koda baktığında az çok ne anlatmak istediğini anlayabilir.Ancak bazı kaynaklarda C dilini yüksek seviye diye gösteriyorlar ben buna asla katılmıyorum. Belirtmek isterim.

Bir de Yüksek Seviyeli dillerden örnek verelim. Bakınız Prolog,LISP bu programlama dilleri yapay zeka kodlamada kullanılırlar. Mantıksal programlama tipleridir. Ufak bir kod parçası :

(let ((length (length (queue-elements queue)))
(try (the fixnum (1+ ptr))))
(if (= try length) 0 try)))


LISP programlama dilinde "let" anahtar kelimesi çok meşhurdur :)



Şimdi bir de C# ' a bakalım nihayetinde. Sizce C# düşükmü ortamı yoksa yüksek mi ? Bunun cevabı çok enteresan :) Çünkü belli değil. Bana soracak olursanız C#'ın yeri Orta ile Yüksek seviye arasında bir yerde. Ama asla orta seviye değil asla da tam yüksek seviye değil. Bunun yanında C# programlama dili tipleri içerisinde "Object Oriented" yani nesne yönelimli, nesne tabanlı, programlama dili kategorisine girmektedir. C# 'taki her öğeyi bir nesne olarak ele alıyoruz. Nesnelerin mensup olduğu(türetildiği) sınıflar, bu sınıfların özellikleri, erişim seviyeleri, kalıtıldığı başka sınıflar olabiliyor. C# Dili daha çok java ve C/C++ dillerinin harmanlanmasından oluşmuştur. Ve .NET FrameWork'un resmi dilidir.

 

Şimdi programlama dili nedir ne değildir, ve C# 'ın bunların arasındaki yeri neresidir biliyorsunuz. Bir sonraki yazımda C# nasıl çalışır. Diğer dillerden farkı nedir. Bunlardan bahsedeceğim. Arkadaşım yazıyon yazıyon ama daha bi satır kod göremedik! demeyin lütfen. Bu yazdıklarımı iyicene sindirdikten sonra hayat sizin için çok daha kolay olacaktır bana inanın. Sadece kod yazmayı öğrenmekle dil öğrenilmez. Çalışma mantığını bildiğiniz zaman, dili tanıdığınız zaman, birisi sana birşey sorduğunda bu dediğin c# la yapılır, yada yapılmaz, diyebilirsiniz. Çünkü dili tanıyorsunuzdur. Yapısı nedir bilirsiniz. Nelere muktedir oldugunu bilirsiniz. Önce bunları öğrenelim sonra yapabilceklerimizi nasıl icraata gecirebiliriz onları düşünelim.

Saygılarımla.

Sorularınız olursa yorum yazmanız yeterlidir. Elimden geldiğince yardımcı olmaya çalışırım. sevgiler..

FacebookDigg It!DZone It!StumbleUponTechnoratiRedditDel.icio.usNewsVineFurlBlinkList

Etiketler: , , , , , , , , , ,

Bilgisayar | Programlama

Son Yorumlar

Comment RSS