Come ottenere l’associazione tardiva in c # per Microsoft.office.interop.word?

Voglio ottenere l’associazione tardiva per le seguenti righe di codice che utilizzano l’associazione anticipata. Come posso ottenerlo in C #?

Quando ho rimosso il riferimento a Microsoft.office.interop.word, ricevo alcuni errori, menzionati nei commenti nel seguente codice. Folloowing è il codice che sto usando per convertire un documento word in pdf.

Type wordType = Type.GetTypeFromProgID("Word.Application"); dynamic Word = Activator.CreateInstance(wordType); object oMissing = System.Reflection.Missing.Value; DirectoryInfo dirInfo = new DirectoryInfo(@"\\server\folder"); FileInfo wordFile = new FileInfo(fileName); Word.Visible = false; Word.ScreenUpdating = false; Object filename = (Object)wordFile.FullName; var doc = Word.Documents.Open(ref filename); doc.Activate(); object outputFileName = wordFile.FullName.Replace(".doc", ".pdf"); /*Getting an error in WdSaveFormat */ object fileFormat = WdSaveFormat.wdFormatPDF; doc.SaveAs(ref outputFileName, ref fileFormat); /*Getting an error in WdSaveOptions */ object saveChanges = WdSaveOptions.wdDoNotSaveChanges; /*Getting an error in _Document*/ ((_Document)doc).Close(ref saveChanges); doc = null; Word.Quit(); MessageBox.Show("Successfully converted"); 

Storicamente, l’associazione tardiva era ansible (e lo è ancora!) Con la riflessione:

 object word = ...; object[] args = new object [] { oMissing, oMissing, oMissing }; word.GetType().InvokeMember( "Quit", BindingFlags.InvokeMethod | BindingFlags.Public | BindingFlags.Instance, null, word, args ); 

Con l’introduzione della dynamic in C # 4, l’associazione tardiva è solo una questione di passaggio al raccoglitore dinamico:

 dynamic word = ...; word.Quit(); 

È davvero così semplice, non è nemmeno necessario passare questi parametri opzionali al metodo Quit . L’unico inconveniente è che non c’è intellisenza sul codice digitato dynamicmente.

Maggiori informazioni su questo qui nell’articolo di Dino:

http://msdn.microsoft.com/en-us/magazine/ff714583.aspx

Fatto i seguenti cambiamenti, sta funzionando bene ora.

  Type wordType = Type.GetTypeFromProgID("Word.Application"); dynamic Word = Activator.CreateInstance(wordType); object oMissing = System.Reflection.Missing.Value; DirectoryInfo dirInfo = new DirectoryInfo(@"\\server\folder"); FileInfo wordFile = new FileInfo(fileName); Word.Visible = false; Word.ScreenUpdating = false; Object filename = (Object)wordFile.FullName; var doc = Word.Documents.Open(ref filename); doc.Activate(); object outputFileName = wordFile.FullName.Replace(".doc", ".pdf"); /*in the WdSaveFormat enum, 17 is the value for pdf format*/ object fileFormat = 17; doc.SaveAs(ref outputFileName, ref fileFormat); /in the WdSaveOptions enum, 0 is for Do not save pending changes.*/ object saveChanges = 0; doc.Close(ref saveChanges); doc = null; Word.Quit(); MessageBox.Show("Successfully converted");