C # создание файла Word - Ошибка открытия файла - PullRequest
0 голосов
/ 04 мая 2018

Я создаю несколько файлов слов (и заменяю некоторые слова) из шаблона слов, используя этот фрагмент кода:

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. Как я могу решить эту проблему?

РЕДАКТИРОВАТЬ В другом файле, который правильно создан в той же позиции, есть некоторые случайные символы, которые я использовал для тестирования, которые также используются в заголовке документа

1 Ответ

0 голосов
/ 04 мая 2018

Похоже, что вы используете регулярные выражения для прямой модификации XML, что обычно приводит к таким трудным для устранения проблемам, как эта, особенно если любое из ваших регулярных выражений соответствует чему-либо, что может быть интерпретировано как XML.

В качестве альтернативы вы можете захотеть исследовать этот класс WordProcessDocument более глубоко. Похоже, что в нем есть объекты со строгой типизацией, такие как Paragraph, которые вы можете изменить более безопасно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...