2009-09-03 15 views
10

Czy ktoś ma jakieś dobre porady lub doświadczenie w zakresie tworzenia silnika przy użyciu C# (VB.NET też jest w porządku), który jest wystarczająco ogólny do obsługi większość przypadków pól tekstowych MS Word muszę wypełnić danymi, które otrzymuję z bazy danych? Krótko mówiąc, mam zamiar rozpocząć tę małą wycieczkę po automatyzacji pakietu Office i mam nadzieję, że tutaj trochę informacji zwrotnej pomoże mi uniknąć czasochłonnych błędów.MS Word Automatyzacja biura - Wypełnianie pól formularza tekstowego i pól formularza pola wyboru i korespondencji seryjnej

Pozdrawiamy i dziękujemy z góry za radę;

Dave

Odpowiedz

15

będzie wysłałem dwa przykłady rozwiązywania problemu automatyzacji. Pierwszy używa MailMerge, a drugi używa zakładek.

Plik słowo wygląda następująco:

Korzystanie korespondencja seryjna (Insert -> Quick Parts -> Field -> Korespondencja seryjna -> Merge pola) Imię: «firstName» Nazwisko: «lastName»

=======

Korzystanie z zakładek (Insert -> zakładka) imię: (< - zakładka jest tutaj, to nie jest widoczna) nazwisko:

I kod jest następujący:

  1. Korzystanie z zakładek

    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!"); 
    
  2. Korzystanie korespondencja seryjna

    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!"); 
    

Użyłem również pewne metody pomocnika.

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); 
    } 

Mam nadzieję, że ta implementacja da kilka pomysłów na rozwiązanie Twojego problemu.

+0

To jest świetne! Uratowałeś mnie, a teraz mam dobry początek. Próbuję go streścić i sformatować, aby inne nadkola mogły z niego korzystać. Pozdrawiam i dziękuję; Dave – Daver

Powiązane problemy