C#创建Word文件 - 打开文件时出错

时间:2018-05-04 08:40:09

标签: c# ms-word

我正在使用以下代码片段从word模板创建一些单词文件(并替换一些单词):

File.Copy(sourceFile, destinationFile, true);

try
{
    using (WordprocessingDocument wordDoc = WordprocessingDocument.Open(destinationFile, true))
    {
        string docText = null;
        using (StreamReader sr = new StreamReader(wordDoc.MainDocumentPart.GetStream()))
        {
            docText = sr.ReadToEnd();
        }

        foreach (KeyValuePair<string, string> item in keyValues)
        {
            Regex regexText = new Regex(item.Key);
            docText = regexText.Replace(docText, item.Value);
        }

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

但是当我尝试打开生成的文件时,我收到此错误:

  

我们很抱歉。我们无法打开XXX.docx,因为我们发现其内容存在问题

     

XML解析错误位置:部分:/word/document.xml,行:2,列:33686

以下是具体位置document.xml的内容:

.....<w:szCs w:val="20"/><w:lang w:val="en-US"/></w:rPr><w:t>&nbsp;</w:t></w:r><w:proofErr w:type="spellEnd"/>....

其中33686是&amp; nbsp的位置。我该如何解决这个问题?

编辑在另一个在同一位置正确生成的文件中,我使用了一些用于测试的随机字符,这些字符也在文档标题中使用

1 个答案:

答案 0 :(得分:0)

您似乎正在使用正则表达式直接修改XML,这通常会导致难以解决的问题,尤其是当您的任何正则表达式与任何可能被解释为XML的内容匹配时。

作为替代方案,您可能希望更深入地研究WordProcessDocument类。看起来它有类似Paragraph的强类型对象,你可以更安全地修改它。