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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C#创建Word文件 - 打开文件时出错相关的知识,希望对你有一定的参考价值。

我正在使用此代码片段从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是&nbsp的位置。我该如何解决这个问题?

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

答案

看起来你正在使用正则表达式直接修改XML,这通常会导致难以解决的问题,特别是如果你的任何正则表达式匹配任何可以解释为XML的问题。

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

以上是关于C#创建Word文件 - 打开文件时出错的主要内容,如果未能解决你的问题,请参考以下文章

word2016打开2007文档出错

word2016文件怎么用word2007打开?

word出错之后,找到asd文件,怎么打开啊?

平均 Word2Vec 创建向量时出错

当我切换到包含片段的活动时应用程序崩溃(二进制 XML 文件第 10 行:二进制 XML 文件第 10 行:膨胀类片段时出错)

导出eclipse可部署插件和片段时出错