我使用下面的代码从word文件表生成XML。
Sub exprt()
Dim nofT, cnt, tag, btxt As Integer
Dim Rcnt As Long
Dim tit, pTyp, cValu As String
Dim dum As Range
Set a = ActiveDocument.Tables
nofT = ActiveDocument.Tables.Count
Set docold = ActiveDocument
For cnt = 5 To nofT
Selection.TypeText ("")
Selection.TypeParagraph
Selection.TypeText ("")
Selection.TypeParagraph
Set dum = ActiveDocument.Tables(cnt).Cell(2, 1).Range
dum.End = dum.End - 1
tit = dum.Text
tit = LTrim(Right(tit, (Len(tit) - InStr(tit, ":"))))
Selection.TypeText (Chr(9) + "<" + Chr(33) + "[CDATA[" + tit + "]]><" + Chr(47) + "title_text_1>")
Selection.TypeParagraph
Selection.TypeParagraph
Rcnt = a(cnt).Rows.Count
Set dum = ActiveDocument.Tables(cnt).Cell(3, 1).Range
dum.End = dum.End - 1
pTyp = dum.Text
pTyp = LTrim(Right(pTyp, (Len(pTyp) - InStr(pTyp, ":"))))
tag = 1
For btxt = 6 To Rcnt - 1
Set dum = ActiveDocument.Tables(cnt).Cell(btxt, 1).Range.FormattedText
dum.End = dum.End - 1
Selection.TypeText (Chr(9) + "<" + Chr(33) + "[CDATA[" + dum + "]]><" + Chr(47) + "body_text_" + LTrim(Str(tag)) + ">")
Selection.TypeParagraph
Selection.TypeParagraph
tag = tag + 1
Next
Set dum = docold.Tables(cnt).Cell(Rcnt, 1).Range
dum.End = dum.End - 1
Selection.TypeText (Chr(9) + "<" + Chr(33) + "[CDATA[" + dum + "]]><" + Chr(47) + "prompt_text_1>")
Selection.TypeParagraph
Selection.TypeParagraph
Selection.TypeText ("<" + Chr(47) + "data>")
Selection.TypeParagraph
Selection.Extend
Selection.HomeKey Unit:=wdStory
newTxt = ActiveDocument.ActiveWindow.Selection
Selection.Cut
Set dum = docold.Tables(cnt).Cell(1, 1).Range
dum.End = dum.End - 1
Call pub(dum.Text)
Next
End Sub
Sub pub(nme As String)
Dim FolderPath As String
Dim FileName As String
FolderPath = "c:/Chandru/"
FileName = nme & ".xml"
Documents.Add
Selection.Paste
Call bld
ActiveDocument.SaveAs FileName:=FolderPath & FileName, FileFormat:=wdFormatText
ActiveDocument.Close
End Sub
问题:我想添加“&lt; b&gt;&amp;&lt; / b&gt;”对于粗体文本,类似于斜体文本。当我检索表格单元格内容时,我没有得到格式化文本。我如何添加&lt; B个&安培; &LT; I&GT;为了大胆和斜体文字分别??
答案 0 :(得分:3)
一般来说,我不太确定以这种方式生成XML文件是否是一个非常好的主意,尤其是为数据添加格式。但这不是你的问题。
提取您依赖
的格式化文本FormattedText
来自Range-object的。现在你可以使用resultinc Range-object来实现将格式化文本粘贴到文档中的其他位置。但它并没有直接“给你”代码中使用的格式。
您需要做的是为字符解析此FormattedText-range对象字符(带格式)或使用其他方法(见下文)。
示例,使用一些格式输出当前选择中的每个字符
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格式格式的字符串(即粗体显示为 ... 等)。
可行有点棘手,因为你需要确保你没有创造无效的东西,比如
<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 安德烈亚斯
答案 1 :(得分:0)
您必须单独检查范围中每个字符的字符格式。