2011-02-04 89 views
6

Tôi cần phải thường xuyên chuyển đổi các tệp * .rtf thành * .docx theo chương trình. Thủ công, điều này hoạt động tốt với Save As bên trong Word 2007 ... docx kết quả hoạt động tốt. Theo lập trình, tôi không thể làm cho nó hoạt động được.Gọi Word cho rtf để chuyển đổi docx

Những gì tôi cố gắng về cơ bản là như sau:

Fetch RTF from Word

... nhưng theo hướng ngược lại. Thay vì mở * .docx và sử dụng SaveAs thành * .rtf, tôi mở tệp * .rtf và sử dụng SaveAs thành * .docx. Tuy nhiên, các tập tin kết quả sẽ không mở ra, và vì vậy rõ ràng có một cái gì đó tôi không hiểu. Là

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

không phải là điều hợp pháp để làm?

Bất kỳ suy nghĩ nào về cách thực hiện việc này sẽ được đánh giá cao.

+0

Thông báo lỗi của bạn là gì? –

+0

Chương trình tự chạy mà không có lỗi. Nếu tôi cố gắng mở tập tin kết quả, nó chỉ đơn thuần mang lại 'Word gặp lỗi khi cố gắng mở tệp'. Khi tôi cố gắng xem xét nó với Công cụ năng suất của Open XML SDK 2.0, nó báo cáo 'Tệp chứa dữ liệu bị hỏng'. – GregA

+0

bạn có thể tải lên một ví dụ về rtf có lỗi không? –

Trả lời

4

Bạn có thể thử mã này, nó làm việc cho tôi

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

Tôi đã nhận lỗi tương tự khi tôi cố gắng sử dụng wdFormatDocument hoặc wdFormatDocumentDefault

EDIT: đây là một cập nhật cho mã này, nó chuyển đổi nó nhưng u sẽ nhận được lỗi một lần sau đó nó không bao giờ xuất hiện một lần nữa !!

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

Vâng, đây là nơi tôi đã kết thúc, ở trên .. cảm ơn – GregA

+0

Bạn được chào đón. –

+0

MS Word có phải được cài đặt trên máy khách để làm việc này không? – bulltorious

2

Bạn có thể hiển thị mã nơi bạn đang gọi SaveAs không? Tôi tò mò mà Word.WdSaveFormat bạn đang chỉ định. Có vẻ như nó đang lưu dữ liệu rtf, nhưng thay đổi phần mở rộng thành .docx.

+0

Tôi đang sử dụng WdFormatDocument ... nhưng tốt ý tưởng, tôi sẽ chơi với một số người khác – GregA

+0

Ah, khi tôi sử dụng WdFormatDocumentDefault tôi có thể nhận được docx thành công, và cũng WdFormatDocument97 được thành công để doc ... cảm ơn cho ý tưởng. Có lẽ ngữ nghĩa của wdFormatDocument khác với tôi mong đợi. – GregA

+0

Tôi đã đánh dấu Pr0fesso0rX là câu trả lời vì ví dụ hoàn chỉnh đó rất hữu ích cho nhiều người hơn trong tương lai ... nhưng cảm ơn, Mark, gợi ý của bạn đã cho tôi ở đó – GregA

0

Đây là mã thực hiện chuyển đổi. Mã này gần giống như được trình bày ở trên, với một số khác biệt nhỏ (nhưng quan trọng) - cần sử dụng tài liệu tham khảo (không phải đối tượng):

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); 
Các vấn đề liên quan