В общем, я не слишком уверен, действительно ли это хорошая идея - генерировать XML-файл таким образом, особенно добавляя форматы к вашим данным.Но это был не ваш вопрос.
Чтобы извлечь форматированный текст, вы полагаетесь на
FormattedText
из объекта Range.Теперь вы можете использовать результирующий Range-объект, например, чтобы вставить форматированный текст где-то еще в вашем документе.Но он напрямую не «дает» вам форматирование для использования в вашем коде.
Что вам нужно сделать, это либо проанализировать этот символ объекта диапазона FormattedText (с форматированием) для символа, либо использовать другой метод (см. ниже).
Пример, вывод каждого символа в текущем выделении с некоторыми форматированиями
Dim myRange As Range
Dim myChar As Variant
Set myRange = Selection.FormattedText
For Each myChar In myRange.Characters
Debug.Print myChar.Text, myChar.Bold, myChar.Italic, myChar.Underline
Next
Вы можете создать функцию, разбирающую ваш диапазон в строку, которая включает форматирования в HTML-формате.(т. е. полужирный как ... и т. д.).
Doable немного сложно, потому что вам нужно убедиться, что вы не создаете что-то недопустимое, например
<b>bold <i>bold italic</b> just italic </i> (no good!)
(Word или большинство браузеров могут не заботиться, но этоопределенно больше не действительный XML).
Вы можете рассмотреть другой способ извлечения вашего отформатированного табличного содержимого.Поскольку начиная с Word 2003 вы можете сохранять свои документы в формате XML, вы можете попытаться извлечь свои данные там.Word отслеживает открытые теги форматирования, но, как всегда, в Word вы получаете много мусора.
... [extract from an XML-Export; use e.g. Notepad++ to get a pretty-print version]
<w:body>
<wx:sect>
<w:tbl>
<w:tblPr>
<w:tblStyle w:val="Tabellengitternetz"/>
<w:tblW w:w="0" w:type="auto"/>
<w:tblLook w:val="01E0"/>
</w:tblPr>
<w:tblGrid>
<w:gridCol w:w="9286"/>
</w:tblGrid>
<w:tr wsp:rsidR="007A0EF3" wsp:rsidTr="007A0EF3">
<w:tc>
<w:tcPr>
<w:tcW w:w="9286" w:type="dxa"/>
</w:tcPr>
<w:p wsp:rsidR="007A0EF3" wsp:rsidRDefault="007A0EF3" wsp:rsidP="007A0EF3">
<w:r>
<w:t>Titel </w:t>
</w:r>
<w:proofErr w:type="spellStart"/>
<w:r wsp:rsidRPr="007A0EF3">
<w:rPr>
<w:b/>
</w:rPr>
<w:t>Bold</w:t>
</w:r>
<w:proofErr w:type="spellEnd"/>
<w:r>
<w:t/>
</w:r>
<w:proofErr w:type="spellStart"/>
<w:r wsp:rsidRPr="007A0EF3">
<w:rPr>
<w:i/>
</w:rPr>
<w:t>Italic</w:t>
</w:r>
<w:proofErr w:type="spellEnd"/>
<w:r>
<w:t/>
</w:r>
<w:proofErr w:type="spellStart"/>
<w:r wsp:rsidRPr="007A0EF3">
<w:rPr>
<w:b/>
<w:i/>
</w:rPr>
<w:t>BoldItalic</w:t>
</w:r>
<w:proofErr w:type="spellEnd"/>
</w:p>
</w:tc>
</w:tr>
...
Копая неважные фрагменты, вы находите текстовое тело, таблицы (таблицы), вашитекст и соответствующее форматирование.
Но, как и в большинстве подобных вопросов, все сводится к как часто вам нужно выполнить эту задачу (сколько усилий вы хотите приложить для программирования автоматизированного решения)), сколько данных считывается и т. д.
HTH Andreas