C# ile OFFİCE PROGRAMLARINA ERİŞMEK


C# ile Office programlarına erişmek için Office kurulumu esnasında C# kodları ile erişeceğimiz program için “.Net ile Programlama Desteği” kurulmuş olmalıdır. Eğer kurulmamış ise Microsoft Office Kur’u tekrar çalıştırdıktan sonra “Özellik Ekle Kaldır” seçeneğini işaretleyerek kullanacağımız program için “Net ile Programlama Desteği” bileşenini ekleyebiliriz.  Veya http://www.microsoft.com/downloads/details.aspx?FamilyID=59daebaa-bed4-4282-a28c-b864d8bfa513&displaylang=en adresinden “PrimaryInteropAssembly.exe” uygulamasını indirerek sisteminize kurabilirsiniz.
Visual Studio’dan yeni bir Windows uygulaması oluşturuyoruz ve “Solution Explorer” penceresinde “Referanslar” bölümüne yeni referans ekleyeceğiz. Yeni referans eklerken “.Net“ sekmesi altında Microsft.Office.Interop.Word'ü referans olarak ekleyeceğiz.
Artık C# ile Office programlarını kullanmaya hazırız ve ilk olarak C# kullanarak Word dosyası oluşturmak. Bunun için formumuza bir richTextBox ve bir Button nesnesi ekleyip isimlerini sırasyıla rtbMetin, ve btnKaydet yapalım. Kaydetme butonun click olayına aşağıdaki kodu yazıyoruz.
private void btnKaydet_Click(object sender, EventArgs e)
{
    //Dosyanın kayıt edileceği yeri belirlemek için önce bir SaveFileDialog kullanalım..
    SaveFileDialog sfd = new SaveFileDialog();
    sfd.InitialDirectory = Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments);
    sfd.RestoreDirectory = true;
    sfd.Filter = "Ms Word 97-2003|*.doc|Ms Word 2007|*.docx";
    sfd.FilterIndex = 2;
    sfd.OverwritePrompt = false;
    //Eğer kaytedme penceresinde Tamam düğmesine basılmamışsa kaydetme işlemini yapmadan çıkcağız.
    if (sfd.ShowDialog(this) != DialogResult.OK)
        return;
    //Kaydetme penceresinde seçilen dosya eğer sistemde zaten varolan bir dosya ise bu dosyayı silmemiz gerekecek.
    FileInfo dosya = new FileInfo(sfd.FileName);
    if (dosya.Exists)
    {
        DialogResult cevap = MessageBox.Show(dosya.Name + " dosyasının üzerine yazılsın mı?", "C# ile Ofis",
                                             MessageBoxButtons.YesNoCancel, MessageBoxIcon.Question);
        if (cevap == DialogResult.Cancel)
        {
            //işlem iptal edilmiş, kaydetme işlemi gerçekleşmeden yordam sonlandırılacak.
            return;
        }
        if (cevap == DialogResult.No)
        {
            //Hayır cevabı verilmiş ise yeni bir Kaydet penceresi görüntülenecek. Bunun için yordamın başına dönüyoruz..
            btnKaydet_Click(sender, e);
            return;
        }
        //Evet cevabı verilmiş ise dosyayı siliyoruz. Silme işlemi başarılı değil ise yordamı sonlandıracağız.
        try
        {
            dosya.Delete();
        }
        catch (IOException)
        {
            MessageBox.Show(
                "Dosya okuma hatası oluştu. Dosya başka bir program tarafından kullanılıyor olabilir.");
            return;
        }
        catch (SecurityException)
        {
            MessageBox.Show("Güvenlik hatası oluştu.");
            return;
        }
        catch (UnauthorizedAccessException)
        {
            MessageBox.Show("Dosyaya erişim hakkınızın yok.");
            return;
        }
        catch (Exception)
        {
            MessageBox.Show("Bilinmeyen bir hata oluştu.");
            return;
        }
    }
    object False = false;
    object True = true;
    object missing = Type.Missing;
    //Artık kaydetme işlemine geçebiliriz.
    //Önce bir Word uygulaması başlatıyoruz.
    ApplicationClass WordUyg = new ApplicationClass();
    //Word uygulamsını gizliyoruz.
    WordUyg.Visible = false;
    //Word uygulaması üzerinde Boş bir Word dokümanı oluşturyoruz.
    object DocType = WdDocumentType.wdTypeDocument;
    Document WordDoc = WordUyg.Documents.Add(ref missing, ref missing, ref DocType, ref False);
    object range = WordDoc.Content;
    //Bir paragraf ekleyip içine metnimizi yazıyoruz.
    Paragraph paragraph = WordDoc.Paragraphs.Add(ref range);
    paragraph.Range.Text = rtbMetin.Text;
    //artık kaydedip kapatabiliriz.
    object dosyaFormat = sfd.FilterIndex == 1 ? WdSaveFormat.wdFormatDocument : WdSaveFormat.wdFormatDocumentDefault;
    object dosyaAdi = dosya.FullName;
    WordDoc.SaveAs(ref dosyaAdi, ref dosyaFormat, ref missing, ref missing, ref True, ref missing,
                   ref missing, ref missing, ref missing, ref missing, ref missing, ref missing, ref missing,
                   ref missing, ref missing, ref missing);
    WordUyg.Quit(ref False, ref missing, ref missing);
    WordUyg = null;
}
Programı çalıştırıp zengin metin kutusu içine birşeyler yazıp, Kaydet düğmesine bastığımızda, belirttiğimiz dosya ismi ile bir word dosyası oluştuğu ve yazdığımız metinin kaydedildiğini göreceksiniz. Ancak bir eksik var. Düz metin olarak kaydedildi, herhangi bir reklendirme veya yazı tipi belirlemesi yapmadık. Bunu kelime kelime yapabileceğimiz gibi tüm dosyaya da uygulayabiliriz.

Kelime kelime formatlama

    Paragraph = WordDoc.Paragraphs[0];
   
    Range kelime1 = paragraph.Range.Words[1];
    kelime1.Font.Name = "Times New Roman";
    kelime1.Font.Size = 22f;
    kelime1.Font.Color = WdColor.wdColorBlue;
    Range kelime2 = paragraph.Range.Words[1];
    kelime2.Font.Name = "Arial";
    kelime2.Font.Size = 14f;
    kelime2.Font.Color = WdColor.wdColorRed;

Tüm dosyayı formatlama

    Range TumDocuman = WordDoc.Content;
    TumDocuman.Font.Name = "Times New Roman";
    TumDocuman.Font.Size = 22f;
    TumDocuman.Font.Italic = 1;
    TumDocuman.Font.Color = WdColor.wdColorYellow;

Paragraf formatlama

    Range para1 = WordDoc.Paragraphs[1].Range;
    para1.Font.Name = "Times New Roman";
    para1.Font.Size = 22f;
    para1.Font.Italic = 1;
    para1.Font.Color = WdColor.wdColorYellow;
Paragrafı hazır stillere göre de formatlayabiliriz. Burada Word’ün kurulumundan gelen hazır stiller kullanılabilceği gibi daha sonradan tanımlanan stiller de kullanılabilir.
    object prop = WdBuiltinStyle.wdStyleHeading1; // "Heading 1";
    para1.ParagraphFormat.set_Style(ref prop);

Dokümana Üst Bilgi/Alt Bilgi ekleme


    HeaderFooter ustBilgi = WordDoc.Sections[1].Headers[WdHeaderFooterIndex.wdHeaderFooterPrimary];
    ustBilgi.Range.ParagraphFormat.Alignment = WdParagraphAlignment.wdAlignParagraphRight;
    ustBilgi.Range.Text = DateTime.Today.ToString("dd MMMM yyyy");
   
    HeaderFooter altBilgi = WordDoc.Sections[1].Footers[WdHeaderFooterIndex.wdHeaderFooterPrimary];
    object sayfaNumYeri = WdPageNumberAlignment.wdAlignPageNumberCenter;
    altBilgi.PageNumbers.Add(ref sayfaNumYeri, ref True);

Doküman tablo ekleme


    object defTableBeh = WdDefaultTableBehavior.wdWord9TableBehavior;
    object autoFitBeh = WdAutoFitBehavior.wdAutoFitContent;
    paragraph = WordDoc.Paragraphs[WordDoc.Paragraphs.Count];
    Table table = WordDoc.Tables.Add(paragraph.Range , 3 , 3, ref defTableBeh, ref autoFitBeh);
    Cell hucre11 = table.Cell(1, 1);
    hucre11.Range.Text = "Hücre 1.1";

Hiç yorum yok:

Yorum Gönder