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