Использовать Open XML для чтения уже открытых документов Word? - PullRequest
3 голосов
/ 28 марта 2012

Все примеры и реализации, которые я видел, используют некоторый тип кода, такой как:

//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. Я не продумал этот подход, но это не идеальный способ, которым я бы хотел это сделать.

Мне также известно свойство в API Word, которое возвращает строку XML, выполнив Word.Range.XML. Однако я не уверен, как загрузить это строковое значение в SDK, чтобы использовать его методы, чтобы помочь мне.

Ответы [ 2 ]

11 голосов
/ 08 ноября 2012

Вы можете открыть текстовый документ Open XML SDK с файлом, уже открытым офисом. Сначала вы должны открыть FileStream, а затем открыть документ Word, указывающий этот поток. Вот пример:

using (Stream stream = new FileStream(file,FileMode.Open,FileAccess.Read,FileShare.ReadWrite))
{
 using (WordprocessingDocument wpd = WordprocessingDocument.Open(stream, false))
 {
  ....
 }
}
1 голос
/ 28 марта 2012

Надстройка Word вместе с Open Xml SDK удовлетворяет вашим требованиям. Вы можете найти образец @ http://blogs.msdn.com/b/atverma/archive/2012/01/11/utility-to-generate-word-documents-from-templates-using-visual-studio-2010-and-open-xml-2-0-sdk-part-3.aspx

...