word / VBA: невозможно получить форматированный текст из таблицы - PullRequest
0 голосов
/ 09 ноября 2010

Я использую приведенный ниже код для генерации XML из таблиц файла слов.

Sub exprt() Dim nofT, cnt, tag, btxt As Integer<br> Dim Rcnt As Long<br> Dim tit, pTyp, cValu As String<br> Dim dum As Range<br> Set a = ActiveDocument.Tables<br> nofT = ActiveDocument.Tables.Count<br> Set docold = ActiveDocument<br></p> <p>For cnt = 5 To nofT<br> Selection.TypeText ("")<br> Selection.TypeParagraph<br> Selection.TypeText ("")<br> Selection.TypeParagraph<br> Set dum = ActiveDocument.Tables(cnt).Cell(2, 1).Range<br> dum.End = dum.End - 1<br> tit = dum.Text<br> tit = LTrim(Right(tit, (Len(tit) - InStr(tit, ":"))))<br> Selection.TypeText (Chr(9) + "<" + Chr(33) + "[CDATA[" + tit + "]]><" + Chr(47) + "title_text_1>")<br> Selection.TypeParagraph<br> Selection.TypeParagraph<br> Rcnt = a(cnt).Rows.Count<br> Set dum = ActiveDocument.Tables(cnt).Cell(3, 1).Range<br> dum.End = dum.End - 1<br> pTyp = dum.Text<br> pTyp = LTrim(Right(pTyp, (Len(pTyp) - InStr(pTyp, ":"))))<br> tag = 1<br> For btxt = 6 To Rcnt - 1<br> Set dum = ActiveDocument.Tables(cnt).Cell(btxt, 1).Range.FormattedText<br> dum.End = dum.End - 1<br> Selection.TypeText (Chr(9) + "<" + Chr(33) + "[CDATA[" + dum + "]]><" + Chr(47) + "body_text_" + LTrim(Str(tag)) + ">")<br> Selection.TypeParagraph<br> Selection.TypeParagraph<br> tag = tag + 1<br> Next<br> Set dum = docold.Tables(cnt).Cell(Rcnt, 1).Range<br> dum.End = dum.End - 1<br> Selection.TypeText (Chr(9) + "<" + Chr(33) + "[CDATA[" + dum + "]]><" + Chr(47) + "prompt_text_1>")<br> Selection.TypeParagraph<br> Selection.TypeParagraph<br> Selection.TypeText ("<" + Chr(47) + "data>")<br> Selection.TypeParagraph<br> Selection.Extend<br> Selection.HomeKey Unit:=wdStory<br> newTxt = ActiveDocument.ActiveWindow.Selection<br> Selection.Cut<br> Set dum = docold.Tables(cnt).Cell(1, 1).Range<br> dum.End = dum.End - 1<br> Call pub(dum.Text)<br> Next<br> End Sub<br>

Sub pub(nme As String)<br> Dim FolderPath As String<br> Dim FileName As String<br> FolderPath = "c:/Chandru/"<br> FileName = nme & ".xml"<br> Documents.Add<br> Selection.Paste<br> Call bld<br> ActiveDocument.SaveAs FileName:=FolderPath & FileName, FileFormat:=wdFormatText<br> ActiveDocument.Close<br> End Sub

Проблема: я хочу добавить « & » для жирного текста,аналогично для курсивного текста.Когда я получаю содержимое ячейки таблицы, я не получаю форматированный текст.Как я могу добавить & для полужирного и курсивного текста соответственно ??

Ответы [ 2 ]

3 голосов
/ 09 ноября 2010

В общем, я не слишком уверен, действительно ли это хорошая идея - генерировать 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

0 голосов
/ 09 ноября 2010

Вам придется проверять форматирование символов каждого символа в диапазоне отдельно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...