2011-02-04 31 views
6

Necesito convertir rutinariamente archivos * .rtf en * .docx. Manualmente, esto funciona bien con Save As dentro de Word 2007 ... el docx resultante se comporta bien. Programáticamente, no puedo hacer que funcione.Invocando Word para la conversión de rtf a docx

Lo que intenté es básicamente la siguiente:

Fetch RTF from Word

... pero en la dirección inversa. En lugar de abrir * .docx y usar SaveAs en * .rtf, estoy abriendo * .rtf y usando SaveAs en * .docx. Sin embargo, el archivo resultante no se abrirá, y evidentemente hay algo que no entiendo. Es

wordApp.Documents.Open(@"D:\Bar\foo.rtf") 

¿Qué hacer?

Se agradecerá cualquier idea sobre cómo hacer esto.

+0

¿Cuál es su mensaje de error? –

+0

El programa en sí mismo se ejecuta sin errores. Si intento abrir el archivo resultante, simplemente produce 'Word experimentó un error al intentar abrir el archivo'. Cuando trato de verlo con Open XML SDK 2.0 Productivity Tool, informa 'El archivo contiene datos corruptos'. – GregA

+0

¿puede por favor cargar un ejemplo del rtf que da error? –

Respuesta

4

Puede probar este código, que funciona para mí

var wordApp = new Microsoft.Office.Interop.Word.Application(); 
var currentDoc = wordApp.Documents.Open(@"C:\TestDocument.rtf"); 
currentDoc.SaveAs(@"C:\TestDocument.doc", Microsoft.Office.Interop.Word.WdSaveFormat.wdFormatDocument97); 

Tengo el mismo error cuando intenté usar wdFormatDocument o wdFormatDocumentDefault

EDIT: se trata de una actualización del código, se convierte ¡pero obtendrás el error una vez y luego nunca volverá a aparecer!

var wordApp = new Microsoft.Office.Interop.Word.Application(); 
var currentDoc = wordApp.Documents.Open(@"C:\TestDocument.rtf"); 
currentDoc.SaveAs(@"C:\TestDocument", Microsoft.Office.Interop.Word.WdSaveFormat.wdFormatDocumentDefault); 
currentDoc.Close(); 
wordApp.Quit(); 
+0

Sí, aquí es donde terminé, arriba ... gracias – GregA

+0

De nada. –

+0

¿Tiene que instalarse MS Word en la máquina del cliente para que esto funcione? – bulltorious

2

¿Puedes mostrar el código al que llamas SaveAs? Tengo curiosidad por el Word.WdSaveFormat que está especificando. Parece que está guardando los datos rtf, pero cambiando la extensión a .docx.

+0

Estoy usando WdFormatDocument ... pero es una buena idea, jugaré con otros – GregA

+0

Ah, cuando uso WdFormatDocumentDefault puedo llegar a docx con éxito, y también WdFormatDocument97 obtiene con éxito doc ... gracias por la idea. Tal vez la semántica de wdFormatDocument sea diferente de lo que esperaba. – GregA

+0

Marqué Pr0fesso0rX como la respuesta ya que ese ejemplo completo probablemente sea útil para más personas en el futuro ... pero gracias, Mark, tu pista me ayudó – GregA

0

Aquí está el código que realiza la conversión. El código es casi el mismo que se muestra arriba, con alguna pequeña (pero importante) diferencia: es necesario usar referencias (no los objetos en sí):

Microsoft.Office.Interop.Word.Application _App = new Microsoft.Office.Interop.Word.Application(); 
Microsoft.Office.Interop.Word.Document _Doc = _App.Documents.Open("c:/xxx.rtf"); 

object _DocxFileName = "C:/xxx.docx"; 
Object FileFormat = Microsoft.Office.Interop.Word.WdSaveFormat.wdFormatXMLDocument; 

_Doc.SaveAs2(ref _DocxFileName, ref FileFormat); 
Cuestiones relacionadas