2013-10-29 131 views
10

如何從List中使用Microsoft.Office.Interop.Word創建.docx文檔?或者最好的方法是添加docx.dll?如何使用Microsoft.Office.Interop.Word創建.docx文檔?

http://www.c-sharpcorner.com/UploadFile/scottlysle/using-the-docx-dll-to-programmatically-create-word-documents/

更新。可能是我的第一個問題是litle不正確。 Microsoft.Office.Interop.Word和DocX.dll有什麼區別?在這兩種情況下,我是否需要使用Microsft Word來創建和打開.docx文檔?

+0

Interop.Word需要將Office安裝在機器上。 DocX不會,它直接篡改.docx文件的OpenXML內容。通常的選擇是Open XML SDK。對這個圖書館的長期支持通常會令人煩惱。查看問題列表以瞭解已知問題。 –

回答

18

安裝OpenXML SDK後,您將能夠引用DocumentFormat.OpenXml裝配:Add Reference - >Assemblies - > Extensions - >DocumentFormat.OpenXml。你也需要參考WindowsBase

比你能夠生成的文檔,例如,像這樣:

using DocumentFormat.OpenXml; 
using DocumentFormat.OpenXml.Packaging; 
using DocumentFormat.OpenXml.Wordprocessing; 

namespace MyNamespace 
{ 
    class Program 
    { 
     static void Main(string[] args) 
     { 
      using (var document = WordprocessingDocument.Create(
       "test.docx", WordprocessingDocumentType.Document)) 
      { 
       document.AddMainDocumentPart(); 
       document.MainDocumentPart.Document = new Document(
        new Body(new Paragraph(new Run(new Text("some text"))))); 
      } 
     } 
    } 
} 

您也可以使用生產力工具(同一個鏈接),以生成文件的代碼。它可以幫助理解如何使用SDK API。

你可以做同樣的互操作性:

using System.Reflection; 
using Microsoft.Office.Interop.Word; 
using System.Runtime.InteropServices; 

namespace Interop1 
{ 
    class Program 
    { 
     static void Main(string[] args) 
     { 
      Application application = null; 
      try 
      { 
       application = new Application(); 
       var document = application.Documents.Add(); 
       var paragraph = document.Paragraphs.Add(); 
       paragraph.Range.Text = "some text"; 

       string filename = GetFullName(); 
       application.ActiveDocument.SaveAs(filename, WdSaveFormat.wdFormatDocument); 
       document.Close(); 

      } 
      finally 
      { 
       if (application != null) 
       { 
        application.Quit(); 
        Marshal.FinalReleaseComObject(application); 
       } 
      } 
     } 
    } 
} 

但在這種情況下,你應該引用COM類型庫微軟。 Word對象庫。


以下是有關COM互操作非常有用的東西:How do I properly clean up Excel interop objects?

+2

如果你想採用互操作方式,你還應該退出應用程序對象並釋放com對象。否則,最終會發生巨大的內存泄漏。這就是爲什麼http://alemiralles.blogspot.com.ar/2012/11/how-to-create-word-documents-from.html –

+0

該鏈接不好。 – KFP

0

如果你不希望使用微軟的互操作辦公然後

我真的很喜歡這個

//Add reference DocX.dll 

using Novacode; 

    // reference to the working document. 
     static DocX gDocument; 

public void CreateWithOpenDoc(string _fileName, string _saveAs, int _LeadNo) 
     { 
      if (File.Exists(_fileName)) 
      { 

       gDocument = DocX.Load(_fileName); 



       //--------------------- Make changes ------------------------------- 

       // Strong-Type 
       Dictionary<string, string> changesList = GetChangesList(_LeadNo, dt.Rows[0]); 

       foreach (KeyValuePair<string, string> keyValue in changesList) 
       { 
        gDocument.ReplaceText(keyValue.Key.ToString().Trim(), keyValue.Value.ToString().Trim(), false); 
       } 

       //------------------------- End of make changes --------------------- 


       gDocument.SaveAs(_saveAs); 

      } 

     } 

取參考 C-sharp corner

0

如果您不知道如何訪問Office 2016互操作對象,則鏈接(https://social.msdn.microsoft.com/Forums/vstudio/en-US/55fe7d16-998b-4c43-9746-45ff35310158/office-2016-interop-assemblies?forum=exceldev)可以爲您提供幫助。

在此之後,您可以嘗試@Evgeny Timoshenko的例子。

class Program 
{ 
    static void Main(string[] args) 
    { 
     Application application = null; 
     try 
     { 
      application = new Application(); 
      var document = application.Documents.Add(); 
      var paragraph = document.Paragraphs.Add(); 
      paragraph.Range.Text = "some text"; 

      string filename = GetFullName(); 
      application.ActiveDocument.SaveAs(filename, WdSaveFormat.wdFormatDocument); 
      document.Close(); 

     } 
     finally 
     { 
      if (application != null) 
      { 
       application.Quit(); 
       Marshal.FinalReleaseComObject(application); 
      } 
     } 
    } 
}