2012-03-28 81 views
3

所有實例和實現我見過使用一些喜歡類型的代碼:使用Open XML讀取已打開的Word文檔?

//filePath is some path to a docx file 
using (WordprocessingDocument wpd = WordprocessingDocument.Open(filePath, true)) 
{ 
    //Do stuff here 
} 

這需要您的文件被關閉。我希望能夠在已經打開的文檔上使用Open XML SDK操作,因爲我想在用戶正在主動查看文檔時做些事情,而且我不一定要保存它。

這可能嗎?我知道Word可能會鎖定文檔,如果它是開放的,所以你無法打開文件(即使是隻讀)。有沒有辦法解決它?

如果我能以某種方式在已經打開的文檔上使用Open XML SDK,那將會非常好。我有一個想法是臨時保存已打開的文件,並在臨時文件上運行OpenXML,並以某種方式與使用Office API的現有文檔進行協調。沒有想到通過這種方法,但它不是我想要做的理想方式。

我也知道在Word API上通過執行Word.Range.XML來返回XML字符串的屬性。但是,我不確定如何將此字符串值加載到SDK,以便我可以利用其方法來幫助我。

+0

當一個文件是隻讀方式打開的,它是開放的只讀和Word(和大多數其他Office應用程序)做確實打開的文件,在該模式下。 AFAIK,不可能告訴操作系統只讀應該被忽略。 (這其實很好 - 你能想象出能夠說出「Gee」的可能影響,忽略有人說他們想要鎖定文件以允許其他人以只讀方式訪問,並且無論如何都允許我訪問。「?) – 2012-03-28 02:19:42

+0

是啊,我完全理解爲什麼它被鎖定。我想我有一些想法,因爲我們可以通過Word API操縱文件,我可以用Open XML做同樣的事情,但那是錯誤的。 – Shark 2012-03-28 02:33:47

回答

1
+0

謝謝,這正是我正在尋找的。看起來,混合方法(Office API和Open XML)是唯一的方法 – Shark 2012-03-28 15:00:26

+0

Atul,我注意到代碼執行Document.Range()。InsertXML來覆蓋新的值。您是否知道Document.Range()會不包括其範圍內的頁眉/頁腳? – Shark 2012-03-28 15:49:09

+0

@Shark,你是否有用'Document.Range()。InsertXML'編寫頁眉/頁腳的解決方案? – Scoregraphic 2012-04-24 14:15:38

10

您可以打開Word文檔Open XML SDK,並在辦公室打開文件。 您應該首先打開FileStream,然後打開指定此流的Word文檔。這裏有一個例子:

using (Stream stream = new FileStream(file,FileMode.Open,FileAccess.Read,FileShare.ReadWrite)) 
{ 
using (WordprocessingDocument wpd = WordprocessingDocument.Open(stream, false)) 
{ 
    .... 
} 
} 
+0

也適用於SpreadsheetDocument。謝謝。 – BlazingFrog 2013-10-23 22:16:15