Замените текст мультилиниями, используя C# с Office.Interop.Word - PullRequest
2 голосов
/ 05 марта 2020

Надеюсь, что этот вопрос найдет вас.

Я разработал приложение под названием «CreateContract», так как контракт представляет собой словесный шаблон, и основная цель этого приложения - заменить некоторые конкретные c существующие тексты. в шаблон слова с входными данными, набранными через конечного пользователя с помощью формы windows.

Все работает нормально, если я заменил текст другим текстом на одной строке, проблема возникает при замене текста многострочными с помощью используя RichTextBox control.

Я попробовал все следующие способы без какого-либо положительного результата: -

replaceWithText = replaceWithText.ToString().Replace(@"\n", @"\v"); 
replaceWithText = replaceWithText.ToString().Replace("\\n", @"\v");
replaceWithText = replaceWithText.ToString().Replace(@"\n", @"\r");
replaceWithText = replaceWithText.ToString().Replace(@"\n", @"\r\n");
replaceWithText = replaceWithText.ToString().Replace(@"\n", "\u2028");

весь код: -

static void FindAndReplace(Microsoft.Office.Interop.Word.Application fileOpen, object findText, object replaceWithText)
{
    //replaceWithText = replaceWithText.ToString().Replace(@"\n", @"\v");
    //replaceWithText = replaceWithText.ToString().Replace("\\n", @"\v");
    //replaceWithText = replaceWithText.ToString().Replace("\\n", @"\r");
    //replaceWithText = replaceWithText.ToString().Replace("\\n", @"\r\n");
    //replaceWithText = replaceWithText.ToString().Replace(@"\n", "\u2028");


    object matchCase = false;
    object matchWholeWord = true;
    object matchWildCards = false;
    object matchSoundsLike = false;
    object matchAllWordForms = false;
    object forward = true;
    object format = false;
    object matchKashida = false;
    object matchDiacritics = false;
    object matchAlefHamza = false;
    object matchControl = false;
    object read_only = false;
    object visible = true;
    object replace = 2;
    object wrap = 1;

    //execute find and replace
    fileOpen.Selection.Find.Execute(ref findText, ref matchCase, ref matchWholeWord,
        ref matchWildCards, ref matchSoundsLike, ref matchAllWordForms, ref forward, ref wrap, ref format, ref replaceWithText, ref replace,
        ref matchKashida, ref matchDiacritics, ref matchAlefHamza, ref matchControl);

}

1 Ответ

1 голос
/ 05 марта 2020

Проблема в том, что в первом блоке кода вы используете строковый литерал Verbatim.

Вы пытаетесь заменить текст "\ n" на (например) строку "\ r \ n". Но на самом деле вы хотите заменить управляющий символ новой строки (0x0A - часто экранированный как \ n) другими управляющими символами. При использовании строковых литералов Verbatim символы не будут экранированы.

Для получения ожидаемого результата удалите эти символы «@» (@) из начала строк в первом блоке кода.

-> replaceWithText = replaceWithText.ToString().Replace("\n", "\r\n"); или т. Д.

...