2014-10-10 1 views
1

Я пытаюсь использовать C# для замены определенной строки текста на всего файла DOCX с перерывом строки (новая строка).Использование OpenXML SDK для замены текста в файле docx с помощью строки break (newline)

Строка текста, которую я ищу, может быть в абзаце или в таблице в файле.

В настоящее время я использую код для замены текста.

using (WordprocessingDocument doc = WordprocessingDocument.Open("yourdoc.docx", true)) 
{ 
    var body = doc.MainDocumentPart.Document.Body; 

    foreach (var text in body.Descendants<Text>()) 
    { 
    if (text.Text.Contains("##Text1##")) 
    { 
     text.Text = text.Text.Replace("##Text1##", Environment.NewLine); 
    } 
    } 
} 

ВОПРОС: Когда я запускаю этот код, выходной файл DOCX имеет текст заменяется пробелом (т.е. "«) вместо разрыва строки.

Как я могу изменить этот код, чтобы сделать эту работу?

ответ

2

Попробуйте с break. Посмотрите пример по этой ссылке. Вам просто нужно добавить перерыв

Пункты, смарт-теги, гиперссылки находятся внутри Run. Так что, возможно, вы можете попробовать это approach. Чтобы изменить текст внутри таблицы, вам нужно будет использовать этот approach. Снова текст всегда находится в Run.

Если вы говорите, что заменить на замену только на пустую строку, я хотел бы попробовать это:

using (WordprocessingDocument doc = 
       WordprocessingDocument.Open(@"yourpath\testdocument.docx", true)) 
     { 
      var body = doc.MainDocumentPart.Document.Body; 
      var paras = body.Elements<Paragraph>(); 

      foreach (var para in paras) 
      { 
       foreach (var run in para.Elements<Run>()) 
       { 
        foreach (var text in run.Elements<Text>()) 
        { 
         if (text.Text.Contains("text-to-replace")) 
         { 
          text.Text = text.Text.Replace("text-to-replace", ""); 
      run.AppendChild(new Break()); 
         } 
        } 
       } 
      } 
     } 
+0

Спасибо за глядя на это. Использование 'run.AppendChild (новый Break());', вероятно, создаст новую строку. Но как я могу это внести в документ только там, где он должен заменить текст? – slayernoah

+0

Функция 'Text.Replace()' принимает только две строки. Я считаю, что – slayernoah

+0

Благодарим за обновление. Я попробую это и дам вам знать :) – slayernoah

1

Вместо добавления разрыв строки, попробуйте сделать два абзаца, один перед «текст будет заменить "и один за ним. Это автоматически добавит разрыв строки между двумя абзацами.

0

text.Parent.Append (новый DocumentFormat.OpenXml.Wordprocessing.Break());

+0

Привет, Арун, добро пожаловать в SO. Не могли бы вы отредактировать этот ответ, чтобы объяснить, почему этот код исправляет проблему и как она работает? В этом случае обесцениваются только ответы на код. –

0
// Open a WordprocessingDocument for editing using the filepath. 
using (WordprocessingDocument wordprocessingDocument = WordprocessingDocument.Open(filepath, true)) 
{ 
// Assign a reference to the existing document body. 
Body body = wordprocessingDocument.MainDocumentPart.Document.Body; 

//itenerate throught text 
foreach (var text in body.Descendants<Text>()) 
{ 
    text.Parent.Append(new Text("Text:")); 
    text.Parent.Append(new Break()); 
    text.Parent.Append(new Text("Text")); 
} 
} 

Это вернет:

Текст:
Текст:

 Смежные вопросы

  • Нет связанных вопросов^_^