2010-08-18 68 views
2

我试图做一个程序,将数据插入到现有word文档的特定位置并保存它的副本。 ,我不知道如何去做,我无法找到办公室2010年自动化的好资源。任何人都可以指引我正确的方向和/或给我一些例子。C#办公室2010自动化

在此先感谢。

找到了解决办法将在

回答

5

这里是我是如何做到的,也未必是最好的方式在以后添加的答案,但它的工作!

引用添加到办公室互操作

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

我希望这是有帮助的人:)