Захватить текст слова как HTML - PullRequest
1 голос
/ 25 августа 2011

Я работаю над инструментом для захвата приложений MS Word, в котором мы фиксируем выделенное содержимое несколькими нажатиями клавиш.Все сделано.Теперь в выбранном диапазоне я хотел бы захватить текст в виде HTML, например

Text = Hello There.Как являются вы ?

Я сделал вышеупомянутый запрос по приведенному ниже примеру кода

string str = string.Empty;
Word.Range rngFindBold =
    ((Word.DocumentClass)(wh.Document)).ActiveWindow.Selection.Range;
rngFindBold.Find.Font.Bold = -1;
foreach (Word.Range rngWord in rngFindBold.Words)
{
    if (rngWord.Bold != 0)
    {
        // rngWord.Bold = 0;
        //rngWord.Text = "<b>" + rngWord.Text + "</b>";
        str += "<b>" + rngWord.Text + "</b>";
    }
    else if (rngWord.Italic != 0)
    {
        // rngWord.Italic = 0;
        //  rngWord.Text = "<i>" + rngWord.Text + "</i>";
        str += "<i>" + rngWord.Text + "</i>";
    }
    else if (rngWord.Underline != 0)
    {
        //  rngWord.Underline = 0;
        //  rngWord.Text = "<u>" + rngWord.Text + "</u>";
        str += "<u>" + rngWord.Text + "</u>";
    }
    else
    {
        str += rngWord.Text;
    }
}

Результат = Hello &lt;b&gt;There&lt;/b&gt;&lt;b&gt;. &lt;/b&gt;&lt;b&gt;How &lt;/b&gt;are &lt;i&gt;you &lt;/i&gt;&lt;i&gt;?&lt;/i&gt;

Выше кодазанимает больше времени при выборе многострочного контента

Как я могу оптимизировать приведенный выше код?

Ответы [ 2 ]

0 голосов
/ 25 августа 2011

Только один обычный совет: используйте StringBuilder вместо конкатенации с помощью операции добавления (+).

В любом случае производительность COM Interop медленная, так что терпите.

0 голосов
/ 25 августа 2011

Вместо использования += используйте объект StringBuilder. Это обрабатывает строковые операции намного эффективнее .

Это изменит ваш код на:

StringBuilder builder = new StringBuilder();
Word.Range rngFindBold =
((Word.DocumentClass)(wh.Document)).ActiveWindow.Selection.Range;
rngFindBold.Find.Font.Bold = -1;
foreach (Word.Range rngWord in rngFindBold.Words)
{
    if (rngWord.Bold != 0)
    {
        builder.Append("<b>" + rngWord.Text + "</b>");
    }
    else if (rngWord.Italic != 0)
    {
        builder.Append("<i>" + rngWord.Text + "</i>");
    }
    else if (rngWord.Underline != 0)
    {
        builder.Append("<u>" + rngWord.Text + "</u>");
    }
    else
    {
        builder.Append(rngWord.Text);
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...