«\ r \ n» отображается в виде маленьких квадратных прямоугольников в текстовом документе, C # - PullRequest
2 голосов
/ 21 декабря 2009

Я добавляю некоторый текст, содержащий '\ r \ n', в текстовый документ во время выполнения. Но когда я вижу слово document, они заменяются небольшими квадратными прямоугольниками: - (

Я пытался заменить их на System.Environment.NewLine, но все же я вижу эти маленькие коробочки.

Есть идеи?

Ответы [ 4 ]

4 голосов
/ 23 декабря 2010

ответ должен использовать \v - это разрыв абзаца.

4 голосов
/ 21 декабря 2009

Разве вы не пробовали одно или другое изолированно, т.е. \r или \n, поскольку Word будет интерпретировать возврат каретки и перевод строки соответственно. Единственный раз, когда вы будете использовать Environment.Newline, находится в чистом текстовом файле ASCII. Слово будет обращаться с этими персонажами по-разному! Или даже последовательность Ctrl + M. Попробуйте, и если это не сработает, пожалуйста, отправьте код.

0 голосов
/ 16 января 2015

После долгих проб и ошибок, вот функция, которая устанавливает текст для узла Word XML и заботится о нескольких строках:

//Sets the text for a Word XML <w:t> node
//If the text is multi-line, it replaces the single <w:t> node for multiple nodes
//Resulting in multiple Word XML lines
private static void SetWordXmlNodeText(XmlDocument xmlDocument, XmlNode node, string newText)
{

    //Is the text a single line or multiple lines?>
    if (newText.Contains(System.Environment.NewLine))
    {
        //The new text is a multi-line string, split it to individual lines
        var lines = newText.Split("\n\r".ToCharArray(), StringSplitOptions.RemoveEmptyEntries);


        //And add XML nodes for each line so that Word XML will accept the new lines
        var xmlBuilder = new StringBuilder();
        for (int count = 0; count < lines.Length; count++)
        {
            //Ensure the "w" prefix is set correctly, otherwise docFrag.InnerXml will fail with exception
            xmlBuilder.Append("<w:t xmlns:w=\"http://schemas.microsoft.com/office/word/2003/wordml\">");
            xmlBuilder.Append(lines[count]);
            xmlBuilder.Append("</w:t>");

            //Not the last line? add line break
            if (count != lines.Length - 1)
            {
                xmlBuilder.Append("<w:br xmlns:w=\"http://schemas.microsoft.com/office/word/2003/wordml\" />");
            }
        }

        //Create the XML fragment with the new multiline structure
        var docFrag = xmlDocument.CreateDocumentFragment();
        docFrag.InnerXml = xmlBuilder.ToString();
        node.ParentNode.AppendChild(docFrag);

        //Remove the single line child node that was originally holding the single line text, only required if there was a node there to start with
        node.ParentNode.RemoveChild(node);
    }
    else
    {
        //Text is not multi-line, let the existing node have the text
        node.InnerText = newText;
    }
}
0 голосов
/ 18 декабря 2014

Word использует элемент XML <w:br/> для разрывов строк.

...