2009-09-03 20 views
10

Herkes, C# (VB.NET de iyidir) kullanarak nasıl bir motor oluşturulacağı konusunda iyi bir tavsiyeye veya deneyime sahip. MS Word metin alanlarının çoğunun bir veri tabanından aldığım verilerle doldurmam gerekiyor mu? Kısacası, bu küçük ofis otomasyonu gezisine başlamak üzereyim ve biraz geri bildirim almamın bazı zaman alıcı hataları önlemek için bana yardımcı olabileceğini umuyorum.MS Word Office Otomasyonu - Doldurma Metni Form Alanları Ve Onay Kutusu Form Alanları Ve Adres Mektup Birleştirme

Herhangi bir tavsiye için şerefe ve şükürler olsun; Ben senin otomasyon sorunun çözümü için iki örnek gönderilecektir

cevap

15

Dave. Birincisi MailMerge kullanıyor ve ikincisi yer imlerini kullanıyor.

word dosyası şuna benzer:

MailMerge kullanma

(Insert -> Hızlı Parçalar -> Tarla -> Posta birleştirme -> Birleştirme alanı) Adı: «firstName» Soyadı: «velastName»

=======

kullanma imleri (Ekle -> BookMark) adı: - soyadı (< imi değil görünür durumda, burada):

Ve kod takip ediyor:

  1. kullanma imleri

MailMerge

Open("D:/Doc1.doc"); 
    foreach (Field myMergeField in oDoc.Fields) 
    { 
     //iTotalFields++; 
     Range rngFieldCode = myMergeField.Code; 
     String fieldText = rngFieldCode.Text; 

     // GET only MAILMERGE fields 
     if (fieldText.StartsWith(" MERGEFIELD")) 
     { 
      Int32 endMerge = fieldText.IndexOf("\\"); 
      Int32 fieldNameLength = fieldText.Length - endMerge; 
      String fieldName = fieldText.Substring(11, endMerge - 11); 

      fieldName = fieldName.Trim(); 
      if (fieldName == "firstName") 
      { 
       myMergeField.Select(); 
       oWordApplic.Selection.TypeText("This Text Replaces the Field in the Template"); 
      } 
     } 
    } 
    SaveAs("D:/Test/Doc2.doc"); Quit(); 
    MessageBox.Show("The file is successfully saved!"); 
kullanma

Open("D:/Doc1.doc"); 
    if (oDoc.Bookmarks.Exists("bkmFirstName")) 
    { 
     object oBookMark = "bkmFirstName"; 
     oDoc.Bookmarks.get_Item(ref oBookMark).Range.Text = textBox1.Text; 
    } 

    if (oDoc.Bookmarks.Exists("bkmLastName")) 
    { 
     object oBookMark = "bkmLastName"; 
     oDoc.Bookmarks.get_Item(ref oBookMark).Range.Text = textBox2.Text; 
    } 

    SaveAs("D:/Test/Doc2.doc"); Quit(); 
    MessageBox.Show("The file is successfully saved!"); 
  • Ayrıca bazı yardımcı yöntemler kullandım.

    ApplicationClass oWordApplic = new Microsoft.Office.Interop.Word.ApplicationClass(); 
        private Microsoft.Office.Interop.Word.Document oDoc = new Document(); 
    
        public void Open(string strFileName) 
        { 
         object fileName = strFileName; 
         object readOnly = false; 
         object isVisible = true; 
         object missing = System.Reflection.Missing.Value; 
    
         oDoc = oWordApplic.Documents.Open(ref fileName, ref missing, ref readOnly, 
         ref missing, ref missing, ref missing, ref missing, ref missing, ref missing, 
         ref missing, ref missing, ref isVisible, ref missing, ref missing, ref missing, ref missing); 
    
         oDoc.Activate(); 
        } 
    
        public void SaveAs(string strFileName) 
        { 
         object missing = System.Reflection.Missing.Value; 
         object fileName = strFileName; 
    
         oDoc.SaveAs(ref fileName, ref missing, ref missing, ref missing, ref missing, ref missing, ref missing, 
         ref missing, ref missing, ref missing, ref missing, ref missing, ref missing, ref missing, ref missing, ref missing); 
        } 
    
        public void Quit() 
        { 
         object missing = System.Reflection.Missing.Value; 
         oWordApplic.Application.Quit(ref missing, ref missing, ref missing); 
        } 
    

    Bu uygulamanın sorununuzu çözmek için bazı fikirler vermesini umuyorum.

  • +0

    Bu harika! Beni çok kurtardın ve şu an iyi bir başlangıç ​​yapacağım. Bunu, diğer herhangi bir taşma makinesinin de kullanabilmesi için soyutlamayı ve biçimlendirmeyi deniyorum. Şerefe ve teşekkürler; Dave – Daver

    İlgili konular