word/VBA:无法从表中检索格式化文本

word/VBA:无法从表中检索格式化文本,vba,Vba,我使用下面的代码从word文件的表生成XML 次级出口() 尺寸nofT、cnt、标签、btxt为整数 长时变暗Rcnt Dim tit、pTyp、cValu作为字符串 微光dum As范围 设置a=ActiveDocument.Tables nofT=ActiveDocument.Tables.Count 设置docold=ActiveDocument 对于cnt=5至nofT Selection.TypeText(“” 选择。类型段落 Selection.TypeText(“” 选择。类型

我使用下面的代码从word文件的表生成XML


次级出口()
尺寸nofT、cnt、标签、btxt为整数
长时变暗Rcnt
Dim tit、pTyp、cValu作为字符串
微光dum As范围
设置a=ActiveDocument.Tables
nofT=ActiveDocument.Tables.Count
设置docold=ActiveDocument

对于cnt=5至nofT
Selection.TypeText(“”
选择。类型段落
Selection.TypeText(“”
选择。类型段落
Set dum=ActiveDocument.Tables(cnt).Cell(2,1).Range
dum.End=dum.End-1
tit=dum.Text
tit=LTrim(右(tit,(Len(tit)-InStr(tit,“:”)))
Selection.TypeText(Chr(9)+“”)
选择。类型段落
选择。类型段落
Rcnt=a(cnt).Rows.Count
Set dum=ActiveDocument.Tables(cnt).Cell(3,1).Range
dum.End=dum.End-1
pTyp=dum.Text
pTyp=LTrim(右(pTyp,(Len(pTyp)-InStr(pTyp,“:”))
标签=1
对于btxt=6到Rcnt-1
Set dum=ActiveDocument.Tables(cnt).Cell(btxt,1).Range.FormattedText
dum.End=dum.End-1
Selection.TypeText(Chr(9)+“”)
选择。类型段落
选择。类型段落
标签=标签+1
下一步
设置dum=docold.Tables(cnt).Cell(Rcnt,1).Range
dum.End=dum.End-1
Selection.TypeText(Chr(9)+“”)
选择。类型段落
选择。类型段落
Selection.TypeText(“”
选择。类型段落
选择。扩展
Selection.HomeKey单位:=wdStory
newText=ActiveDocument.ActiveWindow.Selection
选择。剪切
设置dum=docold.Tables(cnt).Cell(1,1).Range
dum.End=dum.End-1
呼叫发布(dum.Text)
下一步
末端接头



酒吧(nme作为字符串)
将文件夹路径设置为字符串
将文件名设置为字符串
FolderPath=“c:/Chandru/”
FileName=nme&“.xml”
文档。添加
选择。粘贴
致电bld
ActiveDocument.SaveAs文件名:=文件夹路径和文件名,文件格式:=wdFormatText
ActiveDocument.Close
端接头


问题:我想为粗体文本添加“&”,同样为斜体文本添加“”。当我检索表格单元格内容时,我没有得到格式化文本。如何分别为粗体和斜体文本添加

您必须单独检查该范围内每个字符的字符格式。

您必须单独检查该范围内每个字符的字符格式。

一般来说,我不太确定生成XML是否真的是个好主意以这种方式创建文件,尤其是在数据中添加格式。但那不是你的问题

要提取所依赖的格式化文本

FormattedText
从一个范围对象。现在,您可以使用resultinc范围对象将格式化文本粘贴到文档中的其他位置。但它不会直接“提供”代码中使用的格式

您需要做的是为character解析这个格式化的文本范围对象字符(带有格式化),或者使用另一种方法(见下文)

例如,使用某些格式输出当前选择中的每个字符

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>
...
。。。[从XML导出中提取;使用例如记事本++获得漂亮的打印版本]
滴度
大胆的
斜体
粗体斜体
...
通过挖掘不重要的部分,您可以找到文本正文、表、文本和相应的格式

但与大多数类似的问题一样,这一切都取决于您需要多久运行一次此任务(您希望在编写自动化解决方案时投入多少精力)、读取多少数据等等


Andreas

一般来说,我不太确定以这种方式生成XML文件是否真的是个好主意,尤其是在数据中添加格式。但那不是你的问题

要提取所依赖的格式化文本

FormattedText
从一个范围对象。现在,您可以使用resultinc范围对象将格式化文本粘贴到文档中的其他位置。但它不会直接“提供”代码中使用的格式

您需要做的是为character解析这个格式化的文本范围对象字符(带有格式化),或者使用另一种方法(见下文)

例如,使用某些格式输出当前选择中的每个字符

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格式的格式(即粗体为…等等)

“可行”有点棘手,因为你需要确保你没有创造出比“可行”更好的东西