Генерация документов vb.net, обработка символов «больше» и «меньше» в Word

Мы используем редактор TinyMCE для хранения Rich Text в базе данных MS SQL.

При использовании символов «‹» и «>» TinyMCE преобразует их в экранированные символы HTML < и > Например: <p>&lt;This is some test information then sometime I use this&gt;</p>

Мы пытаемся экспортировать эти символы в документ Microsoft Word с помощью автоматизации документов, однако символы не отображаются в документе.

    Function PreFormatHTML(ByVal html As String) As String

        If String.IsNullOrEmpty(html) Then Return html

        html = WebUtility.HtmlDecode(html)

        Return html

    End Function

Dim SumRng As Word.Range = objWordDoc.Bookmarks.Item("bSummary").Range

SumRng.Text = PreFormatHTML(GeneralComponent.CheckReadNull(SqlReader.Item("Summary")))

Это тоже не работает. Я использую Word 2013 и текстовый редактор TinyMCE.

Какие-либо предложения?


person Dale Lawrence    schedule 09.02.2017    source источник
comment
eek... Задайте себе вопрос... какие символы использует HTML для идентификации и переноса объектов... The and %lt; являются стандартными символами управляющей последовательности, которые позволяют вам по-прежнему использовать ‹ и › в тексте.   -  person Trevor_G    schedule 09.02.2017
comment
Да, я понимаю, почему он не появляется. Он думает, что это пустой HTML-тег. Проблема в том, что когда я использую > или <, Word не видит его. Он просто отображает > или <. Вместо < >   -  person Dale Lawrence    schedule 09.02.2017
comment
тогда вам нужно быть более конкретным.. откуда исходит текст... куда вы его кладете..   -  person Trevor_G    schedule 09.02.2017
comment
Я обновил вопрос, надеюсь, это более понятно. Вся информация есть...   -  person Dale Lawrence    schedule 09.02.2017
comment
Function PreFormatHTML(ByVal html As String) As String @Ошибки   -  person Dale Lawrence    schedule 09.02.2017


Ответы (1)


Не видя полного html, я могу только сделать предположение, однако я бы предложил использовать WebUtility.HtmlDecode:

Преобразует строку, закодированную в формате HTML для передачи по протоколу HTTP, в декодированную строку.

Вот как вы будете его использовать:

html = WebUtility.HtmlDecode(html)

С Word я тестировал так:

Dim s As String = "&lt;this is some text and I'm wondering what to do&gt;"

Dim wrd As New Word.Application
Dim doc As Word.Document = wrd.Documents.Add()
Dim para As Word.Paragraph = doc.Content.Paragraphs.Add()

para.Range.Text = WebUtility.HtmlDecode(s)

Вот как выглядит текст в моем Document:

введите здесь описание изображения

Отредактировано в соответствии с комментарием ОП:

Dim s As String = "<p>&lt;This is some test information then sometime I use this&gt;</p>"

Dim wrd As New Word.Application
Dim doc As Word.Document = wrd.Documents.Add()
Dim para As Word.Paragraph = doc.Content.Paragraphs.Add()

para.Range.Text = WebUtility.HtmlDecode(s)

Этот код производит следующий вывод в моем Document:

введите здесь описание изображения

Отредактировано в соответствии с обновлением OP на вопрос:

Я создал документ под названием test.docx и добавил закладку под названием bSummary. Я сделал это, пытаясь воспроизвести код OP.

Dim s As String = "<p>&lt;This is some test information then sometime I use this&gt;</p>"

Dim wrd As New Word.Application
Dim doc As Word.Document = wrd.Documents.Open("C:\test.docx")

Dim SumRng As Word.Range = doc.Bookmarks.Item("bSummary").Range
SumRng.Text = PreFormatHTML(s)

Выход такой же, как и выше. Это наводит меня на мысль, что все, что передается в PreFormatHTML, не то, что вы думаете. GeneralComponent.CheckReadNull(SqlReader.Item("Summary"))) переходит в PreFormatHTML следующую строку; <p>&lt;This is some test information then sometime I use this&gt;</p>?

OP подтвердил, что HTML возвращается из PrrFormatHTML, как и ожидалось. Проблемы, кажется, связаны с Document. Это может быть связано с версией Word Interop, которую использует OP. Я использую Microsoft Word 16.0 Object Library, а ОП использует Microsoft Word 15.0 Object Library.

person Bugs    schedule 09.02.2017
comment
Это работает только для › Например, попробуйте это: <p>&lt;This is some test information then sometime I use this&gt;</p> Тогда ничего не появляется. Я обновлю свой вопрос с более подробной информацией. - person Dale Lawrence; 09.02.2017
comment
@DaleLawrence, как вы ожидаете, что это будет выглядеть в вашем документе? Вот так: <p><This is some test information then sometime I use this></p>? - person Bugs; 09.02.2017
comment
Да, я просто хочу иметь возможность экспортировать как ‹, так и › в одном предложении, но ‹ вообще не появляется. Если они оба используются, текст между ними и символы не отображаются. - person Dale Lawrence; 09.02.2017
comment
HTML-код, который я разместил выше, является вводом для PreFormatHTML. Возвращается <p><This is rubbish data></p> - person Dale Lawrence; 09.02.2017
comment
Я скопировал ваш код, так что теперь мой код идентичен, но он все еще не работает. Какую версию Word Interop вы используете для автоматизации Word? - person Dale Lawrence; 09.02.2017
comment
@ДейлЛоуренс Microsoft Word 16.0 Object Library - person Bugs; 09.02.2017
comment
Моя версия 15.0 может быть проблемой, я попробую обновить ее. Спасибо за помощь. - person Dale Lawrence; 09.02.2017
comment
@DaleLawrence, это меня удивило бы, но если это произойдет, я вернусь и подтвержу. Было бы хорошо отметить, что это проблема. - person Bugs; 09.02.2017