Ana içeriğe atla

C# excel İşlemleri

Merhaba Arkadaşlar,
Çalışmış olduğum firma için yazmış olduğum basit excel programını sizinle paylaşmak istedim. Aslına bakarsanız işin çok fazla bir espirisi yok. Excel içerisinde belli sayfalardaki verileri, belirlemiş olduğum sayfa ile karşılaştırma yapıp kopyalıyor. Bu işlemi ilk başta excel macroları ile yapmıştım fakat sürekli formülleri bozdukları için böyle bir alternatif üretmek zorunda kaldım. Programın Ekran görüntüsü aşağıda göründüğü gibi. 

Görüntü-1

Microsoft.Office.Interop.Excel; sınıfını kullanarak yapmış olduğum basit nacizane bir program işte :)
Ve işte kodlarımız
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using Excel = Microsoft.Office.Interop.Excel; //Burayı gözden kaçırmayın.
using System.Collections;

namespace AhmYarExcelKontrol
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }
        // Excel için yapmam gerek tanımlamalar.
        Excel.Application uygulama;
        Excel.Workbook kitap;
        Excel.Worksheet sayfa;

        private void button1_Click(object sender, EventArgs e) //GözAt Kısmı
        {
            openFileDialog1.Title = "Lütfen Dozya Seçiniz";
            openFileDialog1.Filter = " *.xls Excel Dosyası|*.xls|*.* Tüm Dosyalar|*.*"; //Dosya Formatlarımız
            openFileDialog1.FilterIndex = 1;
            openFileDialog1.ShowDialog();
            textBox1.Text = openFileDialog1.FileName;
        }

 

        private void button2_Click(object sender, EventArgs e)
        {
            int islemOK =0;
            try
            {
                if (textBox1.Text == "")
                    MessageBox.Show("Dosya Seçimini Yapınız...", "HATA", MessageBoxButtons.OK, MessageBoxIcon.Error);
                else
                {
                    DialogResult Cvp = MessageBox.Show("Tüm Excel Dosyalarınız Kapatılacak Onaylıyor Musunuz ?", "Uyarı", MessageBoxButtons.YesNo, MessageBoxIcon.Question);
                    if (Cvp == DialogResult.Yes) //Farklı excel dosyaları açık olunca sebebini çözemediğim bir hata veriyor. Bende kapatıverdim.
                    {
                        foreach (System.Diagnostics.Process p in System.Diagnostics.Process.GetProcesses())
                        {
                            if (p.ProcessName == "EXCEL")
                                p.Kill();
                        }

                        islemOK = 1;
                        progressBar1.Visible = true;
                        progressBar1.Value = progressBar1.Value + 1;
                        uygulama = new Excel.Application();
                        kitap = uygulama.Workbooks.Open(textBox1.Text, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing);
                        progressBar1.Value = progressBar1.Value + 1;
                        object isim;
                        object deger;
                        ArrayList isimler = new ArrayList(); // Akılda kalmasını istediğim veriler için arraylist kullandık.
                        ArrayList degerler = new ArrayList();
                        ArrayList ilkYari = new ArrayList();
                        ArrayList AySonu = new ArrayList();
                        object misValue = System.Reflection.Missing.Value;
                        progressBar1.Value = progressBar1.Value + 1;
                        sayfa = (Excel.Worksheet)kitap.Worksheets.get_Item(15); // Sayfa sayıları sayılmaya 1 den başlıyor 15. sayfadaki veriler lazım bana
                        for (int i = 6; i <= 35; i++)
                        {
                            isim = sayfa.Cells[i, "B"].Value2; // 15. sayfayı tanıttıktan sonra, b sütünunda ki verileri alıyorum.
                            if (isim == null) isim = "";
                            ilkYari.Add(isim.ToString()); // Almış olduğumuz verileri akılda tutmak için
                            progressBar1.Value = progressBar1.Value + 1;
                        }
                        sayfa = (Excel.Worksheet)kitap.Worksheets.get_Item(33); // 33. sayfayı tanımlıyorum.

                        for (int i = 6; i <= 35; i++)
                        {
                            isim = sayfa.Cells[i, "B"].Value2; // B 'deki verileri taratıyoruz.
                            if (isim == null) isim = "";
                            AySonu.Add(isim);
                            progressBar1.Value = progressBar1.Value + 1;
                        }
                        int col = 2;
                        for (int ExcelSayac = 1; ExcelSayac <= 32; ExcelSayac++) // 32. sayfaya kadar tüm sayfaları taramam gerekiyor.
                        {

                            col = col + 1;
                            isimler.Clear();
                            degerler.Clear();
                            if (ExcelSayac != 15) // Sayfa 15 benim referans sayfamam burayı taratmıyorum.
                            {
                                sayfa = (Excel.Worksheet)kitap.Worksheets.get_Item(ExcelSayac); //for ile taradığımız sayfaları tanımlıyoruz. 1.sayfa 2.sayfa ...

                                for (int i = 5; i <= 30; i++)
                                {
                                    isim = sayfa.Cells[i, "B"].Value2;//sayfa içerisindeki verileri alıyorum.
                                    deger = sayfa.Cells[i, "E"].Value2; //sayfa içerisindeki verileri alıyorum.
                                    if (deger == null) deger = "0"; // boş bırakılmışsa benim için 0 'dır.
                                    isimler.Add(isim.ToString());
                                    degerler.Add(deger.ToString());
                                }

                                if (ExcelSayac <= 15)
                                {
                                    sayfa = (Excel.Worksheet)kitap.Worksheets.get_Item(15);// 15. sayfaya verileri yazacağım.
                                    for (int i = 0; i < ilkYari.Count; i++)
                                    {
                                        int row = i + 6;

                                        for (int j = 0; j < isimler.Count; j++)
                                        {

                                            if (ilkYari[i].ToString().ToUpper() == isimler[j].ToString().ToUpper())// Karşılaştırma yapılıyor.
                                            {
                                                sayfa.Cells[row, col] = degerler[j].ToString(); // eşitse veriyi yazıyorum.
                                                degerler.RemoveAt(j); // yazdığım veriyi hafızadan siliyorum.
                                                isimler.RemoveAt(j); // aynısını tekrar yapıyorum.
                                                break; // döngüden çıksın ki, zaman kısalsın.
                                            }
                                        }
                                    }
                                }
                                else
                                {
                                    sayfa = (Excel.Worksheet)kitap.Worksheets.get_Item(33);// sayfa 33 e veri yazacağım.
                                    for (int i = 0; i < AySonu.Count; i++)
                                    {
                                        int row = i + 6;
                                        for (int j = 0; j < isimler.Count; j++)
                                        {

                                            if (AySonu[i].ToString().ToUpper() == isimler[j].ToString().ToUpper())
                                            {
                                                sayfa.Cells[row, col] = degerler[j].ToString();
                                                degerler.RemoveAt(j);
                                                isimler.RemoveAt(j);
                                                break;
                                            }
                                        }
                                    }
                                }

                            }
                            else
                                col = 2;
                            progressBar1.Value = progressBar1.Value + 1;
                        }



                        kitap.SaveAs(textBox1.Text, Excel.XlFileFormat.xlWorkbookNormal, misValue, misValue, misValue, misValue, Excel.XlSaveAsAccessMode.xlExclusive, misValue, misValue, misValue, misValue, misValue); // excel dosyasını kaydediyorum.
                        kitap.Close(true, misValue, misValue); //kitabı kapatıyorum.
                        uygulama.Quit();// Uygulamayı kapatıyorum.
                    }
                }
            }
            catch (Exception exc)
            {
                MessageBox.Show(exc.Message);
                uygulama.Quit();
            }
            finally
            {
                if (islemOK == 1)
                {
                    progressBar1.Value = progressBar1.Maximum;
                    MessageBox.Show("İŞLEM BAŞARIYLA TAMAMLANDI.", "BİLGİLENDİRME", MessageBoxButtons.OK, MessageBoxIcon.Information);
                    Application.Exit(); // Programı kapatmayınca tekrar tekrar işlem yapıyorlar :)
                }// Sizin işlem fazla olursa Progressbar dan hata alabilirsiniz. max. değeri geçtiği için.
            }
       
        }

    }

}

Yorumlar

Adsız dedi ki…
çalışmaarınızda başarılar...

Bu blogdaki popüler yayınlar

C# Görüntü işleme

İlk Olarak Burayı Okumalısınız Öncelikle görüntü işleme üzerine olan kodları birebir hepsini ben yazmadım bunun için google da “c# color tracking” diye bir arama gerçekleştirdim ve referans olarak http://www.uguryalcin.de/c/372 adresini belirledim. Konuya geçecek olursak, ilk önce birkaç kütüphane dosyasına ihtiyacınız olacak. örnek projede kütüphaneler mevcut bunlar kendinizi daha da ileri götürmek için. aforge kütüphanesini indirmek isteyebilirsiniz. Ekran görüntüsü. Ben aslına bakarsanız kod anlatma konusunda pek iyi değilim. Örnek projeyi indirin. Kodları silin aralarına bir şeyler eklemeye çalışın ve öğrenin. Şimdi yeni bir soru ile daha karşılaşıyoruz. Aynı anda birkaç görüntü almak istersek ne yapmalıyız. Aslında onunda cevabı basit ama biraz da sizin araştırma yapıp kendi blogunuzda yayınlamanız için onu size bırakıyorum. Yayınlamış olduğunuz yazıyı yorumlardan paylaşırsanız çok mutlu olurum. Sağlıcakla kalın :) using System; using System.Collections.G...

C# pixel, görüntü işleme

İlk olarak Görüntü İşleme ile ilgili olan yazıyı okumanızı tavsiye edilir. http://yzgrafik.ege.edu.tr/~tekrei/dosyalar/sunum/gi.pdf bu dökümanın 25.sayfasındaki formülü kullanarak siyah beyaz bir resim yapalım dedim. Ekran görüntüsü aşağıdaki gibi oldu. Kaynak kodda şu şekilde ya da c# Pixel İşleme using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Windows.Forms; namespace pixelIsleme { public partial class Form1 : Form { public Form1() { InitializeComponent(); } Bitmap PixelTara( Bitmap Goruntu) { Bitmap yeniGoruntu = new Bitmap (Goruntu.Width, Goruntu.Height); //Bitmap sınıfımızı oluşturduk. for ( int i = 0; i < Goruntu.Width; i++) //resmi yatay olarak taramak için { for ( int j...

C# İle Ping Atma

Evet arkadaşlar uzun zamandan beri blog’ta bir şeyler paylaşma sıkıntısı yaşıyorum. Bende en iyisi eski çalışmalarımı bir bir dökeyim dedim. Öncelikle size birazdan anlatacağım programın yapım hikayesini anlatayım. Bildiğiniz üzere bir zamana kadar Türk Telekom tek internet sağlayıcısıydı sonra d-smile çıktı, daha sonrada biri.net kendisini gösterdi… Biz internete bağlandığımız zaman bunların üçü de vardı aslında ama bulunduğumuz yer itibari ile –okuduğumuz yer küçük bir kasaba 7300 nüfuslu- Türk Telekom’u seçtik, tabi bir ara keşke bağlatmasaydık da dedik ama artık her şey için çok geçti. İnternetimiz bir geliyor, bir gidiyor sonra hiç gelmiyordu. Uzun telefon görüşmeleri ve biraz tehditten sonra zar zor bir teknik servis gönderebildiler. Tamam hiçbir değişiklik olmamıştı ama en azından bulunduğumuz yerde ki bayii müdürü gibi hata sizden kaynaklanıyor dememişti. Hatlarda parazit mi varmış ne gene düzelmedi fakat gel zaman git zaman internetin kesilmeden bağlı kalma süresi 5-6 saatlere...