2010-08-18 10 views
2

J'essaie de créer un programme qui insère des données dans des endroits spécifiques dans un document Word existant et en sauvegarde une copie. et je n'ai aucune idée de comment le faire, et je ne peux pas trouver une bonne ressource sur l'automatisation de bureau 2010. quelqu'un peut-il me diriger dans la bonne direction et/ou me donner quelques exemples.C# office 2010 automation

merci d'avance.

trouvé une solution ajoutera une réponse plus tard

Répondre

5

Voici comment je l'ai fait, il ne peut pas être la meilleure façon, mais son travail!

ajouter des références au bureau Interop

using Microsoft.Office.Interop.Word; 
using Word = Microsoft.Office.Interop.Word; 
using Excel = Microsoft.Office.Interop.Excel; 


      //defines new excel and workd apps 
      var ap = new Word.Application(); 
      var excelApp = new Excel.Application(); 
      // defines new excel worksheet & workbooks 
      Excel.Workbook exBook; 
      Excel.Worksheet xlWorkSheet; 
      // should the excell/word apps be visible ? 
      excelApp.Visible = false; 
      ap.Visible = false; 

      //defining the index numbers of our content controls that are in the word template 
      // index numbers start from 1 and are numbered by order of creation 
      object Price, Name, address; 
      Price = 1; 
      Name = 2; 
      address = 3; 


      // here we open the excell file 
      exBook = excelApp.Workbooks.Open(@"C:\test.xls"); 
      // and we open the first worksheet 
      xlWorkSheet = exBook.Worksheets.get_Item(1); 
      Excel.Range range ; 
      //here we select the first worksheet and make it active 
      Excel._Worksheet workSheet = (Excel.Worksheet) excelApp.ActiveSheet; 
      //we open the word document 
      var doc = ap.Documents.Open(@"C:\test.dotx", ReadOnly: false, Visible: false); 
      // and we assign the content controls 
      var dPrice = doc.ContentControls.get_Item(ref Price); 
      var dName = doc.ContentControls.get_Item(ref Name); 
      var dAddress = doc.ContentControls.get_Item(ref address); 
      doc.Activate(); 
      range = xlWorkSheet.UsedRange; 
      // here we define the columns that we are going to select 
      object t, P , E , K, N,M,J; 

      P = "P"; 
      E = "E"; 
      K = "K"; 
      J = "J"; 
      N = "N"; 
      M = "M"; 

      // and here we loop trought the rows of the excell worksheet 
      // IMPORTANT! excell rows count starts from 1 and not from 0 ! 
     for (int i =1; i< Convert.ToInt16(Settings1.Default.copies) ;i++) 

      { 

       t = i; 
       // here we get the value if cell t(1..2..3..etc), P 
       var dummy = (range.Cells[t, P] as Excel.Range).Value2; 
       // here we insert the content of the cell to the content control 

       dPrice.Range.Text = ": " + Convert.ToString(dummy) + " лв"; 
       dName.Range.Text = ": " + (string)(range.Cells[t, E] as Excel.Range).Value2; 

       // same thing here 
       var city = (string) (range.Cells[t, J] as Excel.Range).Value2; 
       var address1 = (string) (range.Cells[t, K] as Excel.Range).Value2; 
       var city2 = (string) (range.Cells[t, M] as Excel.Range).Value2; 
       var address2 = (string) (range.Cells[t,N] as Excel.Range).Value2; 
       if (!string.IsNullOrEmpty(city2) && city2 != " " && !string.IsNullOrEmpty(address2) && address2 != " ") 
       { 
        dAddress.Range.Text = ": " +city.Normalize() + " " + address1.Normalize() + " , " + city2.Normalize() + " " + address2.Normalize() ; 

       } 
       else 
       { 
        dAddress.Range.Text = ": " + city.Normalize() + " " + address1.Normalize(); 
       } 


       try 
       { 
        //here we try to save the word document as a pdf file 
        object name = @"C:\t\test"+i+".pdf"; 
        object FileFormat = WdSaveFormat.wdFormatPDF; 
        doc.SaveAs(ref name, ref FileFormat); 

       } 
       catch (Exception ex) 
       { 
        MessageBox.Show("Exception Caught: " + ex.Message +" source "+ ex.Source.ToString()); 

       } 

      } 
      // here quit word without saving the changes to the template 
      ap.Quit(SaveChanges: false, OriginalFormat: false, RouteDocument: false); 
      excelApp.Quit(); 
      // and we release the objects 
      System.Runtime.InteropServices.Marshal.ReleaseComObject(ap); 
      System.Runtime.InteropServices.Marshal.ReleaseComObject(excelApp); 

J'espère que cela a été utile à quelqu'un :)

Questions connexes