Ana içeriğe atla

Interop.Excel ile Excel Dökümanı Oluşturma

 

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using Excel = Microsoft.Office.Interop.Excel;

namespace ExcelMeselesi
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void button1_Click(object sender, EventArgs e)
        {       
            // 1. Arka planda çalışacak Excel uygulamasını başlatıyoruz
            Excel.Application excelUygulamasi = new Excel.Application();

            // Eğer kod çalışırken arka planda Excel'in gerçekten açıldığını 
            // gözünüzle görmek isterseniz bunu true yapabilirsiniz. 
            // Kullanıcı görmesin, gizlice arkada çalışsın derseniz false kalabilir.
            excelUygulamasi.Visible = true;

            // 2. Yeni bir boş çalışma kitabı (Workbook) ekliyoruz
            Excel.Workbook calismaKitabi = excelUygulamasi.Workbooks.Add(Type.Missing);

            // 3. Kitabın içindeki ilk sayfayı (Sheet1) seçiyoruz
            Excel.Worksheet calismaSayfasi = (Excel.Worksheet)calismaKitabi.ActiveSheet;
            calismaSayfasi.Name = "Şirket Raporu"; // Sayfa adını değiştiriyoruz

            try
            {
                // 4. Hücrelere verilerimizi yazmaya başlıyoruz
                // NOT: Excel Interop kütüphanesinde satır ve sütunlar 1'den başlar (0'dan değil!)

                // Başlıklarımızı atalım
                calismaSayfasi.Cells[1, 1] = "Kullanıcı Adı";
                calismaSayfasi.Cells[1, 2] = "Departman";
                calismaSayfasi.Cells[1, 3] = "Son Giriş Tarihi";

                // Başlıkları biraz süsleyelim (C#'ın gücü)
                Excel.Range baslikAlani = calismaSayfasi.Range["A1", "C1"];
                baslikAlani.Font.Bold = true; // Kalın yaz yap
                baslikAlani.Interior.Color = System.Drawing.ColorTranslator.ToOle(System.Drawing.Color.LightBlue); // Arka planı açık mavi yap

                // Şimdi de verileri dolduralım (Buralar normalde SQL'den veya SAP'tan gelebilir)
                calismaSayfasi.Cells[2, 1] = "Savaş";
                calismaSayfasi.Cells[2, 2] = "Finans (FI)";
                calismaSayfasi.Cells[2, 3] = DateTime.Now.ToString("dd.MM.yyyy HH:mm");

                calismaSayfasi.Cells[3, 1] = "Ahmet";
                calismaSayfasi.Cells[3, 2] = "Bilgi İşlem (IT)";
                calismaSayfasi.Cells[3, 3] = "27.06.2026 14:20";

                // Sütun genişliklerini içeriğe göre otomatik ayarla (Kullanıcıya kolaylık)
                calismaSayfasi.Columns.AutoFit();

                // 5. Dosyayı kullanıcının Masaüstüne kaydedelim
                string masaustuYolu = Environment.GetFolderPath(Environment.SpecialFolder.Desktop);
                string tamDosyaYolu = System.IO.Path.Combine(masaustuYolu, "Csharp_Excel_Raporu.xlsx");

                // Eğer aynı isimde dosya varsa üzerine yazarken Excel uyarı vermesin diye geçici olarak uyarıları kapatıyoruz
                excelUygulamasi.DisplayAlerts = false;
                calismaKitabi.SaveAs(tamDosyaYolu);
                excelUygulamasi.DisplayAlerts = true;

                MessageBox.Show("Excel raporu başarıyla oluşturuldu ve Masaüstüne kaydedildi!\nDosya: Csharp_Excel_Raporu.xlsx",
                                "İşlem Başarılı", MessageBoxButtons.OK, MessageBoxIcon.Information);
            }
            catch (Exception ex)
            {
                MessageBox.Show("Excel üretilirken bir hata oluştu: " + ex.Message, "Hata", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
            finally
            {
                // 6. EN ÖNEMLİ KISIM: İşimiz bittiğinde Excel'i arka planda açık bırakmamak için hafızayı temizliyoruz.
                // Bunu yapmazsak görev yöneticisinde yüzlerce "Excel.exe" birikir ve bilgisayarı kasar.
                calismaKitabi.Close(false);
                excelUygulamasi.Quit();

                // Nesneleri RAM'den tamamen temizliyoruz
                System.Runtime.InteropServices.Marshal.ReleaseComObject(calismaSayfasi);
                System.Runtime.InteropServices.Marshal.ReleaseComObject(calismaKitabi);
                System.Runtime.InteropServices.Marshal.ReleaseComObject(excelUygulamasi);

                // Çöp toplayıcıyı tetikliyoruz
                GC.Collect();
                GC.WaitForPendingFinalizers();
            }
        }
    }
    
}

********* NOT ********
Nuget Paketleri :

Microsoft.Office.Interop.Excel Microsoft.Office.Interop.Access

Bu blogdaki popüler yayınlar

FOREGIN KEY ve INNER JOIN ile ilişkili tablo oluşturma Örneği

--1)DataBase oluşturma Sorgusu --CREATE DATABASE Join_Alistirma; --GO --USE Join_Alistirma; --GO --2)musteri Tablosu oluşturma --CREATE TABLE musteri ( --    musteri_ID INT IDENTITY(1,1) PRIMARY KEY, --    adi_soyadi NVARCHAR(100) NOT NULL, --    telefon NVARCHAR(20) NOT NULL --); ---3)araclar Tablosunu Oluştur (FOREIGN KEY ile) --CREATE TABLE araclar ( --    id INT IDENTITY(1,1) PRIMARY KEY, --    musteri_ID INT NOT NULL, --    plaka NVARCHAR(20) NOT NULL, --    marka NVARCHAR(50), --    model NVARCHAR(50), --    yil INT, --    FOREIGN KEY (musteri_ID) REFERENCES musteri(musteri_ID) --); ----------------------------------------------------------------------------- ----NOT  --musteri_ID → musteri tablosuyla bağlantılı olacak. --plaka, marka, model, yil alanları araç bilgilerini tutacak. ----------------------------------------------------------------------------- ---4)Tablolara muste...

İD ye göre işlemler C# ve Class örnekleri ile Birlikte

***************************************************************************** ✅ DbHelper.cs adında bir sınıf ile Insert , Update , Delete , GetId , SelectAll işlemlerini kolayca yapabilirsiniz. ✅ SCOPE_IDENTITY() kullanarak son eklenen kaydın ID’sini çekme örneği var. ✅ Bu ID’yi Label veya TextBox ’a yazdırabilir, Update veya Delete için tekrar kullanabilirsiniz. ✅ DataGridView ile tüm verileri listeleme örneği de dahil. *****************************************************************************  // ✅ DbHelper.cs using System; using System.Collections.Generic; using System.Data; using System.Data.SqlClient; public static class DbHelper {     private static string connectionString = @"Data Source=.\SQLEXPRESS;Initial Catalog=YourDatabase;Integrated Security=True";     public static object InsertAndGetId(string query, Dictionary<string, string> parameters)     {         using (SqlConnection connection = new SqlConne...

INNER JOIN Silme İşleminde REFERANCE Hatası

 SQL 'de INNER JOIN için ben diagram kullandım ama silme işlemleri için bu hataya yol açtı kodlar yazıldıktan sonra. Sillme işleminin yapıla bilmesi için : Diagram üzerinden "ON DELETE CASCADE" ekleme SSMS’te veritabanını aç. Database Diagrams → kullandığın diyagramı aç. isim tablosu ile soyisim tablosu arasındaki ilişki çizgisine çift tıkla . INSERT and UPDATE Specification bölümünü bul. Delete Rule → Cascade olarak değiştir. Kaydedip diyagramı kapat.   2️⃣ SQL komutuyla ekleme (manuel yöntem) Eğer diyagramdan uğraşmak istemiyorsan, SQL koduyla da ekleyebilirsin: ALTER TABLE Soyisim DROP CONSTRAINT FK_Soyisim_Isim;  -- Burada mevcut foreign key adını yazacaksın ALTER TABLE Soyisim ADD CONSTRAINT FK_Soyisim_Isim FOREIGN KEY (isim_Id) REFERENCES Isim(isim_Id) ON DELETE CASCADE; ON DELETE CASCADE tamamen silme işlemleri için tanımlanan bir FOREIGN KEY davranış kuralıdır. Normal FOREIGN KEY : Ana tabloda bir kayıt silmek istersen ve bu kayıt başka ...