2010-11-09 4 views
0

J'utilise le code ci-dessous pour générer du code XML à partir de tables de fichiers Word.mot/VBA: Impossible de récupérer le texte mis en forme de la table

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

Problème: Je veux ajouter "< b> & </b>" pour le texte en gras, de même pour le texte en italique. Lorsque je récupère le contenu de la cellule du tableau, je ne reçois pas de texte formaté. Comment puis-je ajouter < b> & < i> pour gras & en italique respectivement ??

Répondre

0

Vous devrez vérifier le formatage des caractères de chaque caractère de la gamme individuellement.

3

En général, je ne suis pas sûr que ce soit vraiment une bonne idée de générer un fichier XML de cette façon, en particulier en ajoutant des formats à vos données. Mais ce n'était pas ta question.

Pour extraire le texte formaté vous comptez sur le

FormattedText 

à partir d'une plage objet. Vous pouvez maintenant utiliser l'objet resultinc de Rangeinc, par exemple. Collez le texte formaté ailleurs dans votre document. Mais il ne vous "donne" pas directement les formats à utiliser dans votre code. Ce que vous devez faire est d'analyser ce caractère d'objet FormattedText-range (avec la mise en forme) pour le caractère ou utiliser une autre méthode (voir ci-dessous).

exemple, sortie tous les caractères de la sélection en cours avec certains formatages

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 

Vous pouvez créer une fonction analyse votre gamme dans une chaîne qui comprend les formatages en format HTML (c.-à-gras comme ... et ainsi de suite).

Doable peu difficile, parce que vous devez vous assurer que vous que vous ne créez pas quelque chose qui est pas valide comme

<b>bold <i>bold italic</b> just italic </i> (no good!) 

(Word ou la plupart des navigateurs ne se souciait pas, mais il est certanly plus valide XML).

Vous pouvez envisager un autre moyen d'extraire le contenu de votre table formatée. Depuis Word 2003, vous pouvez sauvegarder vos documents au format XML, vous pouvez essayer d'y extraire vos données. Word conserve une trace des balises de formatage ouvertes, mais comme toujours avec Word, vous avez beaucoup de déchets.

... [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> 
... 

En fouillant dans les bits sans importance que vous trouverez votre texte corps, votre table (s), votre texte et formatages correspondant.

Mais comme pour la plupart des questions comme celle-ci, il faut combien de fois vous devez exécuter cette tâche (combien d'effort que vous voulez mettre dans la programmation d'une solution automatisée), combien de données sont lues et ainsi de suite.

HTH Andreas

Questions connexes