2013-10-29 15 views
10

Come si crea il documento .docx con Microsoft.Office.Interop.Word dall'elenco? o il modo migliore è aggiungere docx.dll?Come posso creare il documento .docx con Microsoft.Office.Interop.Word?

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

Update. Potrebbe essere la mia prima domanda è un litle errato. Qual è la differenza tra Microsoft.Office.Interop.Word e DocX.dll? Ho bisogno di Microsft Word per creare e aprire il documento .docx in entrambi i casi?

+0

Interop.Word richiede l'installazione di Office sulla macchina. DocX no, infila direttamente il contenuto OpenXML di un file .docx. La scelta abituale è l'Open XML SDK. Il supporto a lungo termine per questa libreria sarebbe di solito qualcosa di cui preoccuparsi. Consulta l'elenco dei problemi per i problemi noti. –

risposta

18

Dopo l'installazione OpenXML SDK sarà in grado di fare riferimento DocumentFormat.OpenXml montaggio: Add Reference ->Assemblies -> Extensions ->DocumentFormat.OpenXml. Inoltre sarà necessario fare riferimento a WindowsBase.

di quello che sarà in grado di generare il documento, ad esempio, in questo modo:

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

Inoltre è possibile utilizzare Produttività Tool (lo stesso link) per generare il codice da un documento. Può aiutare a capire come funziona con l'API SDK.

si può fare lo stesso con Interop:

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

Ma in questo caso si dovrebbe fare riferimento tipo COM libreria di Microsoft. Libreria di oggetti di Word.


Qui ci sono cose molto utili su interoperabilità COM: How do I properly clean up Excel interop objects?

+2

Se si desidera passare all'intero modo, è necessario chiudere l'oggetto dell'applicazione e rilasciare l'oggetto com. Altrimenti finirai con enormi perdite di memoria. Questo è il motivo per cui http://alemiralles.blogspot.com.ar/2012/11/how-to-create-word-documents-from.html –

+0

Il link è sbagliato. – KFP

0

Se non si desidera utilizzare l'ufficio di interoperabilità Microsoft quindi

Ho davvero apprezzato questo

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

      } 

     } 

introito di riferimento C-sharp corner

0

Se non sai come accedere agli oggetti di interoperabilità di Office 2016, il link (https://social.msdn.microsoft.com/Forums/vstudio/en-US/55fe7d16-998b-4c43-9746-45ff35310158/office-2016-interop-assemblies?forum=exceldev) può aiutarti.

Dopo questo, puoi provare l'esempio di @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); 
      } 
     } 
    } 
} 
Problemi correlati