C Sharp İle MS Excel Dosyasını Okumak Ve Yazmak

02 Nisan 2008 Çarşamba


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
http://forums.asp.net/p/1210717/2135147.aspx
http://blogs.msdn.com/erikaehrli/archive/2005/10/27/excelmanagedautofiltering.aspx


Visual Studio 2008 ile hazırlandı.
Kodları indirmek için Tıklayınız


Yorumlar


İsim
E-mail
Yorum
Gönder
Arama

   
Ara
Rasgele Yazı
Tezimsi Görsel Excel Anlatımları

Captivate, Asp.Net, VB, XML, Flash... Kullanılarak hazırlanmış Excel anlatan e-learning sistemi

Devamını Oku
Excel Videoları

Excel E-Learning