2009-09-03 5 views
10

Qualcuno ha qualche buon consiglio o esperienza su come creare un motore utilizzando C# (VB.NET va bene anche) che è abbastanza generico da gestire la maggior parte dei casi di campi di testo di MS Word devo compilare i dati che ottengo da un database? In breve, sto per intraprendere questa piccola escursione di Office automation e spero che un po 'di feedback qui possa aiutarmi a evitare alcuni errori che richiedono tempo.MS Word Office Automation - Campi di testo modulo di riempimento e campi modulo di controllo Campi e unione postale

Saluti e grazie in anticipo per qualsiasi consiglio;

Dave

risposta

15

sarò inviato due esempi per risolvere il tuo problema di automazione. Il primo utilizza MailMerge e il secondo utilizza i segnalibri.

il file di Word si presenta così:

Utilizzando MailMerge (Inserisci -> Parti rapide -> Campo -> Posta unione -> Unisci campo) Nome: «firstName» Cognome: «lastName»

=======

Utilizzo dei segnalibri (Inserisci -> segnalibro) nome: (< - il segnalibro è qui, non è visibile) Cognome:

E il codice è il seguente:

  1. Utilizzo dei segnalibri

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

Ho anche utilizzato alcuni metodi di supporto.

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

Spero che questa implementazione fornisca alcune idee per risolvere il problema.

+0

Questo è fantastico! Mi hai salvato in grande e ora ho un buon inizio. Provo ad astrarre e formattare questo modo in modo che anche qualsiasi altro overflowers possa usarlo. Saluti e grazie; Dave – Daver

Problemi correlati