April 5th, 2008 — 8:16pm
2 tez yapan şanssız insanlardan biriyim herhalde… İkisi de Excel ile ilgili
fena olmayan 2 tezim var. 2. tezi yapmamın hikayesi biraz garip, hocalar beni kandırdı
diye düşünüyorum :) neyse boş veriyim üstünden çok zaman geçti…
Macromedia Captivate ile ders anlatım videoları kaydedip. İlk tezde temel Excel
anlatımı (Talha ile beraber) hazırladım. 2. Tezde de pivottable anlatımı hazırladım.

İlk tez hem anlatımları içeriyor hemde bir LMS’e sahip. Bir e-learning için
gerekli bütün teoriyi barındırıyor. Bir SCORM uyumu eksik… :) ama kendi standardı
var… hem görsel anlatım hemde görsel ölçme değerlendirme yapan müthiş güzel
bir örnek.
İçindeki bazı konular dallanmalı eğitim modülü ile hazırlanmıştır.
Görsel sınavlar bir captivate, aspx kardeşliği ile çalışıyor.
Sınav uygulamalarında da Captivate programını kullandık. Sınav sonuçlarını kayıt
edebilmek için captivate programı breeze isimli başka bir programı kullanır. İçerisinde
etkileşimin durumuna göre javascript kod çalıştırmak da mümkündür. Ama programın
bu özelliklerine tam hakim olmadığımızdan ve Breeze programını hiç bilmediğimiz
için kendi bildiğimiz yöntemlerle bir çözüm ürettik.
Sınavlarda öğrenci uygulamanın herhangi bir aşamasında yanlış yaparsa başka bir
sayfaya yönlendirdik. Sınav uygulamada öğrenci en son ekrana kadar geldiyse de doğru
yapmış olduğu için doğru yaptığı ile ilgili başka bir sayfaya yönlendirdik.

Yanlızca anlatım videolarını şu linkten izleyebilirsiniz.
http://excel.serdarb.com
Visual Studio 2003, Macromedia Flash ve Macromedia Captivate ile Hazırlandı
Kodları indirmek için Tıklayınız

İkinci Tez Office 2007 de Pivot Table kullanımını anlatıyor temel olarak. Birinci
tezin küçük kardeşi sayılır. Bu uygulamada da görsel sınav var. Öğrenciye şu konuları
tekrar çalış diye uyaran ama çok detayı yok. Motivasyonsuz hazırlanmış bir uygulamadır…
:)
Visual Studio 2005, Macromedia Flash ve Macromedia Captivate ile Hazırlandı
Kodları indirmek için
Tıklayınız
Comment » | E-Learning
April 2nd, 2008 — 10:18pm
Excel tartışmasız mükemmel bir program. Bence bu güne kadar geliştirilmiş en mükemmel
uygulama. Adı da İngilizce “Excellent” kelimesinden türetilmiştir. Detaylarını
bilip kullananlar üzerlerindeki işleri ona yıkar ve rahat ederler.
Excel aklınıza ne kadar firma geliyorsa hepsinde kullanılanda bir uygulamadır.
Kimisi Word kullanır gibi kullansa da :) neredeyse bütün firmalar Excel kullanır.
Yazdığımız uygulamalarda da zaman zaman Excel dosyası çıktısı vermek zorunda kalabiliriz.
Bazı durumlarda kullandığımız class’ların (Mesela CrystalReport) Excel çıktısı
veren metotları vardır. Ama olmadığı zaman nasıl yaparız. Onun için basit bir örnek
yaptım.
C# içinde Excel kullanmamız gerekiyorsa, Excel library’sini referans olarak
göstermemiz gerekiyor. “Add reference” kısmında “Com” sekmesinde
kullanabileceğiniz Excel libraryleri göreceksiniz. Ofis 2003 çıktısı için Microsoft
Excel 11.0 Object library’yi ekliyoruz. Birde Excel Com bir nesne, metotların
aldığı bazı parametrelerde “Missing.Value” kullanmamız gerekiyor bunun
için de Reflection ‘ı kullanacağımızı belirtmemiz gerekiyor.
using Excel = Microsoft.Office.Interop.Excel;
using System.Reflection;
Sonrasında yapmak istediklerimizi yazabiliriz.
Örnek’de bir excel dosyasını okumak ve içine bir şeyler yazmak canlandırılıyor.
Ayrıca bir datagrid otomatik olarak excel dosyası olarak kaydedilebilir. bunu yapabileceğimiz
bir metodu da örneğe ekledim.
Örneğin Kodları
protected void Page_Load(object sender, EventArgs e)
{
DataTable dt = new DataTable();
ExcelOku(dt);
ExcelYaz(dt);
ExcelYeniDosyayaYaz("YeniDosya", dt);
Response.Write("İşlem Tamamlandı");
}
private void ExcelYeniDosyayaYaz(string p, DataTable _excel)
{
try
{
Excel.Application xlApp = new Excel.Application();
if (xlApp == null)
{
throw new Exception("Excel Başlatılamadı. Excel Kurulu Olmaya Bilir.");
}
xlApp.Visible = false;
xlApp.DisplayAlerts = false;
Excel.Workbook wb = xlApp.Workbooks.Add(Excel.XlWBATemplate.xlWBATWorksheet);
Excel.Worksheet ws = (Excel.Worksheet)wb.Sheets[1];
for (int i = 1; i <= _excel.Rows.Count; i++)
{
int r = i + 1;
Excel.Range _UrunAdi = (Excel.Range)ws.Cells[r, 1];
Excel.Range _Marka = (Excel.Range)ws.Cells[r, 2];
Excel.Range _Bolge = (Excel.Range)ws.Cells[r, 3];
Excel.Range _Adet = (Excel.Range)ws.Cells[r, 4];
Excel.Range _Fiyat = (Excel.Range)ws.Cells[r, 5];
Excel.Range _Tutar = (Excel.Range)ws.Cells[r, 6];
Excel.Range _Tarih = (Excel.Range)ws.Cells[r, 7];
int j = i - 1;
_UrunAdi.Formula = _excel.Rows[j][0].ToString();
_Marka.Formula = _excel.Rows[j][1].ToString();
_Bolge.Formula = _excel.Rows[j][2].ToString();
_Adet.Formula = _excel.Rows[j][3].ToString();
_Fiyat.Formula = _excel.Rows[j][4].ToString();
_Tutar.Formula = _excel.Rows[j][5].ToString();
_Tarih.Formula = _excel.Rows[j][6].ToString();
}
ws.Cells.EntireColumn.AutoFit();
wb.SaveAs(Server.MapPath("YeniExcel.xls"), Missing.Value, Missing.Value,
Missing.Value, Missing.Value, Missing.Value,
Microsoft.Office.Interop.Excel.XlSaveAsAccessMode.xlNoChange, Missing.Value,
Missing.Value, Missing.Value, Missing.Value, Missing.Value);
wb.Close(true, Missing.Value, Missing.Value);
xlApp.Quit();
}
catch (Exception ex)
{
Response.Write(ex.Message + " ");
}
}
private void ExcelOku(DataTable BosDt)
{
try
{
Excel.Application xlApp = new Excel.Application();
if (xlApp == null)
{
throw new Exception("Excel Başlatılamadı. Excel Kurulu Olmaya Bilir.");
}
xlApp.Visible = false;
xlApp.DisplayAlerts = false;
Excel.Workbook wb = xlApp.Workbooks.Open(
Server.MapPath(ConfigurationManager.AppSettings["OkunacakExcelFile"]),
Missing.Value, Missing.Value, Missing.Value, Missing.Value, Missing.Value, Missing.Value,
Missing.Value, Missing.Value, Missing.Value, Missing.Value, Missing.Value, Missing.Value,
Missing.Value, Missing.Value);
Excel.Worksheet ws = (Excel.Worksheet)wb.Sheets[1];
Excel.Range satirSayisiIcin = ws.Cells.SpecialCells(
Microsoft.Office.Interop.Excel.XlCellType.xlCellTypeLastCell, Missing.Value);
for (int c = 0; c < satirSayisiIcin.Column; c++)
{
BosDt.Columns.Add("C_" + c.ToString());
}
for (int i = 1; i <= satirSayisiIcin.Row; i++)
{
int r = i + 1;
Excel.Range _UrunAdi = (Excel.Range)ws.Cells[r, 1];
Excel.Range _Marka = (Excel.Range)ws.Cells[r, 2];
Excel.Range _Bolge = (Excel.Range)ws.Cells[r, 3];
Excel.Range _Adet = (Excel.Range)ws.Cells[r, 4];
Excel.Range _Fiyat = (Excel.Range)ws.Cells[r, 5];
Excel.Range _Tutar = (Excel.Range)ws.Cells[r, 6];
Excel.Range _Tarih = (Excel.Range)ws.Cells[r, 7];
int j = i - 1;
BosDt.Rows.Add(_UrunAdi.Formula, _Marka.Formula, _Bolge.Formula, _Adet.Formula,
_Fiyat.Formula, _Tutar.Formula, _Tarih.Formula);
}
ws.Cells.EntireColumn.AutoFit();
wb.Close(true, Missing.Value, Missing.Value);
xlApp.Quit();
}
catch (Exception ex)
{
Response.Write(ex.Message + " ");
}
}
private void ExcelYaz(DataTable _excel)
{
try
{
Excel.Application xlApp = new Excel.Application();
if (xlApp == null)
{
throw new Exception("Excel Başlatılamadı. Excel Kurulu Olmaya Bilir.");
}
xlApp.Visible = false;
xlApp.DisplayAlerts = false;
Excel.Workbook wb = xlApp.Workbooks.Open(
Server.MapPath(ConfigurationManager.AppSettings["BosExcelFile"]),
Missing.Value, Missing.Value, Missing.Value, Missing.Value, Missing.Value, Missing.Value,
Missing.Value, Missing.Value, Missing.Value, Missing.Value, Missing.Value, Missing.Value,
Missing.Value, Missing.Value);
Excel.Worksheet ws = (Excel.Worksheet)wb.Sheets[1];
for (int i = 1; i <= _excel.Rows.Count; i++)
{
int r = i + 1;
Excel.Range _UrunAdi = (Excel.Range)ws.Cells[r, 1];
Excel.Range _Marka = (Excel.Range)ws.Cells[r, 2];
Excel.Range _Bolge = (Excel.Range)ws.Cells[r, 3];
Excel.Range _Adet = (Excel.Range)ws.Cells[r, 4];
Excel.Range _Fiyat = (Excel.Range)ws.Cells[r, 5];
Excel.Range _Tutar = (Excel.Range)ws.Cells[r, 6];
Excel.Range _Tarih = (Excel.Range)ws.Cells[r, 7];
int j = i - 1;
_UrunAdi.Formula = _excel.Rows[j][0].ToString();
_Marka.Formula = _excel.Rows[j][1].ToString();
_Bolge.Formula = _excel.Rows[j][2].ToString();
_Adet.Formula = _excel.Rows[j][3].ToString();
_Fiyat.Formula = _excel.Rows[j][4].ToString();
_Tutar.Formula = _excel.Rows[j][5].ToString();
_Tarih.Formula = _excel.Rows[j][6].ToString();
}
ws.Cells.EntireColumn.AutoFit();
wb.Close(true, Missing.Value, Missing.Value);
xlApp.Quit();
}
catch (Exception ex)
{
Response.Write(ex.Message + " ");
}
}
private void DataGridToExcel()
{
Response.Clear();
Response.AddHeader("content-disposition", "attachment;filename=Projects.xls");
Response.Charset = "iso-8859-9";
Response.ContentType = "application/vnd.xls";
Response.ContentEncoding = System.Text.Encoding.Default;
StringWriter stringWrite = new StringWriter();
HtmlTextWriter htmlWrite = new HtmlTextWriter(stringWrite);
DataGrid dg = new DataGrid();
dg.ID = "Deneme";
DataTable dt = new DataTable();
dt.Columns.Add("A");
dt.Columns.Add("B");
dt.Rows.Add("Deneme", "1");
dt.Rows.Add("Deneme", "2");
dg.DataSource = dt;
dg.DataBind();
dg.HeaderStyle.BackColor = System.Drawing.Color.White;
dg.RenderControl(htmlWrite);
Response.Write(stringWrite.ToString());
Response.End();
}
Kaynaklar
asp.net forum
msdn blog
Visual Studio 2008 ile hazırlandı.
Kodları
indirmek için Tıklayınız
Old format or invalid type library. (Exception from HRESULT: 0×80028018 (TYPE_E_INVDATAREAD))
Bu hatayı aldığımızda kültür sorunu yaşıyor olabiliriz. Workbook a birşey eklemeden
önce thread’in kültürünü değiştirerek sorunu çözebiliyoruz.
Thread.CurrentThread.CurrentCulture = new CultureInfo("en-US");
Msdn forum post
http://support.microsoft.com/kb/306022/
http://support.microsoft.com/default.aspx?scid=kb;en-us;320369
http://msdn.microsoft.com/en-us/library/aa168494.aspx
14 comments » | Csharp - C#, Excel
January 10th, 2008 — 9:07pm
Comments Off | Tools - Programs