【问题标题】:C# office 2010 automationC# office 2010 自动化
【发布时间】:2010-08-18 08:38:46
【问题描述】:

我正在尝试制作一个程序,将数据插入现有 Word 文档的特定位置并保存一份副本。 而且我不知道该怎么做,而且我找不到关于 Office 2010 自动化的任何好的资源。 谁能指出我正确的方向和/或给我一些例子。

提前致谢。

找到解决方案,稍后会添加答案

【问题讨论】:

    标签: automation c#-4.0 ms-office


    【解决方案1】:

    这是我的做法,它可能不是最好的方法,但它的工作原理!

    添加对办公室互操作的引用

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

    我希望这对某人有帮助:)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-01-22
      • 1970-01-01
      • 1970-01-01
      • 2013-03-22
      • 2016-12-27
      • 1970-01-01
      相关资源
      最近更新 更多