streamReader.ReadToEnd()只返回标头OpenXML

时间:2016-08-29 21:16:27

标签: c# asp.net-mvc openxml streamreader

拜托,我想找一个单词,用openXML替换单词doccument中的另一个单词

我使用这种方法

public static void AddTextToWord(string filepath, string txtToFind,string ReplaceTxt)
    {

     WordprocessingDocument wordDoc = WordprocessingDocument.Open(filepath, true);
        string docText = null;
        StreamReader sr = new StreamReader(wordDoc.MainDocumentPart.GetStream());
        docText = sr.ReadToEnd();
        System.Diagnostics.Debug.WriteLine(docText);
        Regex regexText = new Regex(txt);
        docText = regexText.Replace(docText,txt2);
        StreamWriter sw = new StreamWriter(wordDoc.MainDocumentPart.GetStream(FileMode.Create));
        System.Diagnostics.Debug.WriteLine(docText);         
        wordDoc.Close();
    }

docText

只返回文档的xml shema页面的头部。

  <?xml version="1.0" encoding=.......

1 个答案:

答案 0 :(得分:0)

检查字符串

如果您要替换现有内容中的特定字词或词组,您可能只想使用String.Replace()方法,而不是执行可能无法正常工作的Regex.Replace()(因为它期望正则表达式而不是传统的字符串)。如果您希望使用正则表达式,这可能无关紧要,但值得注意。

确保您提取内容

Word文档显然不像纯文本一样易于解析,因此为了获得实际的内容,您可能必须使用Document.Body作为StreamReader的目标属性而不是使用docText = wordDoc.MainDocumentPart.Document.Body.InnerText; 对象读取:

docText

执行替换

话虽如此,您当前似乎正在阅读文件的内容并将其存储在名为Replace()的字符串中。由于您拥有该字符串并知道要查找和替换的值,因此请调用docText = docText.Replace(txtToFind,ReplaceTxt); 方法,如下所示:

using (var sw = new StreamWriter(wordDoc.MainDocumentPart.GetStream(FileMode.Create)))
{
     sw.Write(docText);
}

写出您的内容

执行替换后,您只需将更新的文本写入流中:

avatars,