2009-12-21 6 views
2

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

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

Любая идея?

+3

сообщения какого-то код? –

+1

Нам нужно знать, как вы «добавляете текст». –

+1

сложно сказать, в чем проблема .. вы используете крылья? – 2009-12-21 14:04:01

ответ

4

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

3

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

+1

ps - я понимаю, что это было задано более года назад .. просто подумал, что это поможет кому-либо еще найти ответ. – benpage

0

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

0

После долгих проб и ошибок, здесь есть функция, которая задает текст для узла 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; 
    } 
}