Мне нужно сделать простой поиск и заменить строку в текстовом документе. Я думал, что это будет довольно легко, но это не так (по крайней мере, для меня)
Проверьте этот код (он принимает поток, открывает другую часть документа, ищет строку, а затем заменяет ее).
Проблема в том, что сохраняется только то, что находится внутри MainDocumentPart и FooterPart. HeaderPart не сохраняется. Странно ...
public static void ProcessDocument(Dictionary<string, string> properties, Stream fs)
{
using (WordprocessingDocument doc = WordprocessingDocument.Open(fs, true))
{
string docText = null;
using (StreamReader sr = new StreamReader(doc.MainDocumentPart.GetStream()))
{
docText = sr.ReadToEnd();
}
docText = DoTheReplace(properties, docText);
using (StreamWriter sw = new StreamWriter(doc.MainDocumentPart.GetStream(FileMode.Create)))
{
sw.Write(docText);
}
foreach (FooterPart footer in doc.MainDocumentPart.FooterParts)
{
string footerText = null;
using (StreamReader sr = new StreamReader(footer.GetStream()))
{
footerText = sr.ReadToEnd();
}
footerText = DoTheReplace(properties, footerText);
using (StreamWriter sw = new StreamWriter(footer.GetStream(FileMode.Create)))
{
sw.Write(footerText);
}
}
foreach (HeaderPart header in doc.MainDocumentPart.HeaderParts)
{
string headerText = null;
using (StreamReader sr = new StreamReader(header.GetStream()))
{
headerText = sr.ReadToEnd();
}
headerText = DoTheReplace(properties, headerText);
using (StreamWriter sw = new StreamWriter(header.GetStream(FileMode.Create)))
{
sw.Write(headerText);
}
}
}
}
И да, если есть более простые способы замены строки в слове doc, пожалуйста, дайте мне знать.
Спасибо за любую помощь
Larsi