Как искать и заменять текст в документе Word с помощью OpenXML?

У меня есть один файл .docx и Dictionary<string,string> . Мне нужно просмотреть документ и заменить текст, равный Dictionary.Key, на соответствующее значение в Dictionary. Он будет на сервере, из-за этого я не хочу использовать Microsoft.Office.Interopt библиотеку, которая генерирует COM-объекты. Для решения я предпочел OpenXML, но в сети для меня нет рабочего решения. Я нашел это решение Эрика Уайта . Это не сработало для меня. Точнее говоря, я запускаю метод SearchAndReplace, но в документе нет никаких изменений. Я просмотрел методы и обнаружил, что проблема заключается в методе PutXmlInDocument, который сохраняет XmlDocument в данный OpenXmlPart, получая его поток. Есть ли другие решения с использованием OpenXML или что делать, чтобы сохранить XmlDocument в OpenXmlPart?

Это тот метод, сохранение которого не удалось:

public static void PutXmlDocument(OpenXmlPart part, XmlDocument xmlDoc)
    {
        using (Stream partStream = part.GetStream(FileMode.Create, FileAccess.Write))
        using (XmlWriter partXmlWriter = XmlWriter.Create(partStream))
            xmlDoc.Save(partXmlWriter);

    }

person Javidan    schedule 26.04.2013    source источник
comment
codeproject.com/Articles/87711/   -  person Sam Leach    schedule 26.04.2013
comment
Это в абзаце? Это в таблице? Это в шапке? Это в футере? Сколько их значений в docx? Если их несколько, вы хотите заменить их все или только первый? Нам нужно гораздо больше информации.   -  person jn1kk    schedule 26.04.2013
comment
У меня нет информации об этом. У меня есть список значений поиска и список новых значений. Мне нужно найти значение поиска и изменить его на новое значение. Это может быть каждый из вас написал выше.   -  person Javidan    schedule 26.04.2013
comment
@Javidan, как ты не знаешь? Ваш ответ на этот вопрос отличает мой ответ на 100-200 строк. Вы не можете делать никаких предположений?   -  person jn1kk    schedule 26.04.2013
comment
Я могу только сказать, что это не может быть в шапке и в футере.   -  person Javidan    schedule 26.04.2013
comment
Как и в Microsoft.Office.Interop.Word, я знаю там метод Replace. мне нужно что-то вроде этого   -  person Javidan    schedule 26.04.2013
comment
Я нашел это решение Эрика Уайта , но это не работает для меня.   -  person Javidan    schedule 26.04.2013
comment
Если у вас есть возможность, не могли бы вы помочь с этим? Спасибо! stackoverflow.com/questions/26307691   -  person slayernoah    schedule 11.10.2014


Ответы (1)


Я связался с блогером и спросил об этой ситуации. Наконец я прихожу к этому решению. Если замена 1 на WordprocessingDocument, то решение Эрика Уайта прекрасно работает. Но если оно больше 1, то после выполнения всех замен необходимо вызвать приведенный ниже метод, прежде чем что-то делать с WordprocessingDocument.

WordprocessingDocument.Package.Close();
person Javidan    schedule 01.05.2013