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