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