2009-08-05 38 views
8

Tôi có một chút mã sẽ mở tài liệu Word 2007 (docx) và cập nhật CustomXmlPart thích hợp (do đó cập nhật Điều khiển nội dung trong chính tài liệu khi chúng được ánh xạ tới CustomXmlPart) nhưng không thể tìm ra cách lưu tệp này dưới dạng tệp mới.! Chắc chắn nó không thể là khó!Lưu tài liệu OpenXML (Word) được tạo từ mẫu

Suy nghĩ hiện tại của tôi là tôi cần mở mẫu và sao chép nội dung vào tệp tài liệu mới, trống theo tệp, cập nhật CustomXmlPart khi tôi gặp nó. Hãy gọi cho tôi kiểu cũ nhưng nghe có vẻ hơi khó chịu với tôi!

Tại sao tôi không thể thực hiện WordprocessingDocument.SaveAs (tên tệp); ...?

Vui lòng cho tôi biết tôi đang thiếu thứ gì đó đơn giản ở đây.

Cảm ơn trước

+0

Tôi nghĩ rằng OpenXml được cho là làm cho mọi thứ trở nên háo hức - pfft.! Rời bỏ những điều trên để dành thời gian tôi đã xem xét công việc tiếp theo trong danh sách - nhúng một số tệp docx vào một docx duy nhất (đừng hỏi!) Và tôi chỉ đang đau đầu ở đây! – DilbertDave

+0

* dễ dàng hơn * .. so với viết tay xml dựa trên thông số kỹ thuật;) – JoeBrockhaus

Trả lời

14

Bạn đang đề cập đến SDK OpenXml? Thật không may, như OpenXml SDK 2.0, không có phương thức SaveAs. Bạn cần phải:

  1. Tạo bản sao tạm thời tệp mẫu của bạn, đặt tên nó là bất cứ điều gì bạn muốn.
  2. Thực hiện các thay đổi OpenXml của bạn trên tệp ở trên.
  3. Lưu các phần thích hợp (ví dụ: sử dụng phương thức. myWordDocument.MainDocumentPart.Document.Save() cho nội dung chính hoặc phương pháp someHeaderPart.Header.Save() cho một tiêu đề cụ thể).
+6

Đó là khá nhiều những gì tôi đã làm - dường như là một chút thiếu sót đối với tôi. Nếu bạn mở một tài liệu và sửa đổi nó sau đó nó đứng lên lý do mà bạn có thể muốn lưu các phiên bản cập nhật với một tên khác nhau. – DilbertDave

+1

Điều tương tự cũng có thể được thực hiện nếu bạn đọc tập tin vào MemoryStreams chính xác? Tôi muốn tránh tạo bản sao của tệp. –

+0

@PabloRomeo Tôi nghĩ rằng có thể là có thể, nhưng đó không phải là cách tiếp cận mà tôi đã thử lại khi tôi làm việc với OpenXml. Bạn có thể làm việc với 'MemoryStream' sau đó lưu nó vào một tên tập tin mong muốn ở cuối, nếu đó là mục tiêu. Các liên kết này có thể giúp: [Làm việc với tài liệu XML mở trong bộ nhớ] (http://msdn.microsoft.com/en-us/library/office/ee945362%28v=office.11%29.aspx) và [Sự cố với OpenXML và MemoryStreams?] (Http://amykinsgardiner.blogspot.com/2011/02/trouble-with-openxml-and-memorystreams.html) –

0

Thực tế bạn có thể, ít nhất, trong OpenXml SDK 2.5. Tuy nhiên, watchout để làm việc với một bản sao của tập tin gốc, bởi vì những thay đổi trong XML sẽ được thực sự phản ánh trong tập tin. Ở đây bạn có phương pháp Load và Save của lớp tùy chỉnh của tôi (sau khi loại bỏ một số mã xác nhận, ...):

public void Load(string pathToDocx) 
    { 
     _tempFilePath = CloneFileInTemp(pathToDocx); 
     _document = WordprocessingDocument.Open(_tempFilePath, true); 
     _documentElement = _document.MainDocumentPart.Document; 
    }  

    public void Save(string pathToDocx) 
    { 
     using(FileStream fileStream = new FileStream(pathToDocx, FileMode.Create)) 
     { 
      _document.MainDocumentPart.Document.Save(fileStream); 
     } 
    } 

Có "nút Không" như một WordprocessingDocument dụ.

Các vấn đề liên quan