2011-02-04 14 views
6

Potrzebuję rutynowo programowo konwertować pliki * .rtf na * .docx. Ręcznie, działa to dobrze w programie Zapisz jako w programie Word 2007 ... wynikowy docx zachowuje się dobrze. Programowo nie mogę go uruchomić.Wywoływanie programu Word dla konwersji rtf do docx

Co próbowałem to w zasadzie następujące:

Fetch RTF from Word

... ale w odwrotnym kierunku. Zamiast otwierać * .docx i używać SaveAs do * .rtf, otwieram * .rtf i używam SaveAs na * .docx. Jednak wynikowy plik nie zostanie otwarty, a więc widocznie jest coś, czego nie rozumiem. Czy nie jest to uzasadnione?

Wszelkie przemyślenia na temat tego, jak to zrobić, będą mile widziane.

+0

Jaki jest twój komunikat o błędzie? –

+0

Sam program działa bez błędów. Jeśli spróbuję otworzyć plik wynikowy, to po prostu przynosi "W programie Word wystąpił błąd podczas próby otwarcia pliku". Kiedy próbuję spojrzeć na to za pomocą narzędzia Open XML SDK 2.0 Productivity Tool, zgłasza "Plik zawiera uszkodzone dane". – GregA

+0

Czy możesz przesłać przykład pliku rtf, który zawiera błąd? –

Odpowiedz

4

Można spróbować tego kodu, to działa na mnie

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

Mam ten sam błąd, gdy próbuję użyć wdFormatDocument lub wdFormatDocumentDefault

EDIT: Jest to aktualizacja do kodu, to konwertuje ale raz dostaniesz błąd, a potem już nigdy się nie pojawił !!

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

Tak, to jest miejsce, w którym skończyłem, w górze .. dzięki – GregA

+0

Nie ma za co. –

+0

Czy program MS Word musi być zainstalowany na komputerze klienta, aby to działało? – bulltorious

2

Czy możesz wyświetlić kod, pod który dzwonisz pod numer SaveAs? Jestem ciekawy, który typ określasz. Wygląda na to, że zapisuje dane rtf, ale zmienia rozszerzenie na .docx.

+0

Używam WdFormatDocument ... ale dobry pomysł, będę grać z innymi – GregA

+0

Ah, kiedy używam WdFormatDocumentDefault mogę dostać do docx pomyślnie, a także WdFormatDocument97 dostaje pomyślnie do doc ... dzięki za pomysł. Może semantyka wdFormatDocument jest inna niż się spodziewałem. – GregA

+0

Oznaczyłem Pr0fesso0rX jako odpowiedź, ponieważ ten pełny przykład jest najprawdopodobniej przydatny dla większej liczby osób w przyszłości ... ale dzięki, Mark, twoja podpowiedź mnie tam dostała – GregA

0

Oto kod, który wykonuje konwersję. Kod jest prawie taki sam, jak pokazano powyżej, z niewielką (ale ważną) różnicą - konieczne jest użycie referencji (nie samych obiektów):

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); 
Powiązane problemy