XL 2013 petit problème de caractère a la création du xml

patricktoulon

XLDnaute Barbatruc
bonjour à tous
j'ai un petit soucis que je n'arrive pas a résoudre
a la création du xml (encodé en utf-8/utf-16) le caractère "&" se transforme en "&"
donc la chaine 
 se transforme en 

quelqu'un aurait une idée ?(pour garder "
")
VB:
Sub test()
Dim DocXml, balise, enfant, oCreation
Set DocXml = CreateObject("Microsoft.XMLDOM")    'creation
    Set balise = DocXml.appendchild(DocXml.createelement("balise"))
     balise.setAttribute "groupage", "do not"
    balise.setAttribute ("id"), "provix1"
    Set oCreation = DocXml.createProcessingInstruction("xml", "version=""1.0"" encoding=""UTF-8"" standalone=""yes""")    'creation de l'entete du process
    DocXml.InsertBefore oCreation, DocXml.ChildNodes.Item(0)    'insertion parametre process


    Set enfant = DocXml.createelement("enfant"): enfant.setAttribute "commentaire", "juste un test 
 de commentaire": enfant.setAttribute ("id"), "provix2"

    balise.appendchild (enfant)
SaveFormatDocToFileXL DocXml, ThisWorkbook.Path & "\exoamp.xml"
End Sub
'enregistrer le xml  au format utf-8 et indenté
Public Sub SaveFormatDocToFileXL(ByVal doc, ByVal FileName As String)
    Dim rdrdom As Object, StreamFormaté As Object, wtrFormatted As Object

    Set rdrdom = CreateObject("MSXML2.SAXXMLReader.6.0")
    Set StreamFormaté = CreateObject("ADODB.Stream")
    Set wtrFormatted = CreateObject("MSXML2.MXXMLWriter")

    With StreamFormaté
        .Open
        .Type = 1    'adTypeBinary
        With wtrFormatted
            .omitXMLDeclaration = False
            .standalone = True
            .byteOrderMark = True    'If not set (even to False) then
            '.encoding is ignored.
            .Encoding = "UTF-8"    'Even if .byteOrderMark = True
            'UTF-8 never gets a BOM.
            .indent = True
            .output = StreamFormaté
            With rdrdom
                Set .contentHandler = wtrFormatted
                Set .dtdHandler = wtrFormatted
                Set .errorHandler = wtrFormatted
                .putProperty "http://xml.org/sax/properties/lexical-handler", wtrFormatted
                .putProperty "http://xml.org/sax/properties/declaration-handler", wtrFormatted
                .Parse doc
            End With
        End With
        If Dir(FileName) <> "" Then Kill FileName
    
        .SaveToFile FileName
        .Close
    End With
    Set rdrdom = Nothing
    Set StreamFormaté = Nothing
    Set wtrFormatted = Nothing
End Sub

je me casse la tête depuis hier avec ça 🤣🤣
 
Solution
alors en ecriture ca va impec par contre en relecture l'orsque je réouvrait le projet
le "&#13;" ressortait comme des saut de ligne donc à la re sauvegarde je perdait tout repère
car les saut de ligne dans le customui c'est chr(32)+ un caractère inconnu+chr(10) donc pour le reconvertir c’était compliqué
donc je met en creation un"|" a la place des sauts de ligne je sauve avec l'ancienne fonction le projet
et quand je crée le fichier excel avec le customUI.xml final je le crée avec la fonction précédemment citée
terminé plus de problème de conversion

TooFatBoy

XLDnaute Barbatruc
où déjà dit ? car si c'est dans le module de Robert je ne l'ai pas ouvert
C'était juste après #1, mais comme ça a été ignoré, probablement car non compris comme on peut le voir en #5, du coup j'ai supprimé. ;)


mais non cette méthode d'échappement ne peut fonctionner en XML
T'es sûr que c'est en XML le pb ?

Autre question : t'es sûr que c'est &#13 qu'il te faut écrire ?
 
Dernière édition:

fanch55

XLDnaute Barbatruc
Salut le forum, @patricktoulon
Après m'être cassé les dents toute l'après-midi sur les escaped et autre xmlwriter sans succès (et en testant le supertip sur Office Ribbon Editor ),
je suis tombé sur ce site
dont j'ai pompé dans la première réponse tous les codes de Classe ( ce qui marche n'est pas à refaire ... )
et j'en suis donc arrivé à ce classeur qui semble donner une solution :
 

Pièces jointes

  • XmlPat.xlsm
    20.1 KB · Affichages: 2
Dernière édition:

fanch55

XLDnaute Barbatruc
Merci Patrick pour ces explications très claires .

Pour ceux qui pensent avoir trouvé un endroit où loger un mode d'emploi ,
le nombre de lignes du supertip est dépendant de l'écran (pas de la fenêtre)
1695236105411.png

et la longueur max limité à 1024 cars ( le "&#13;" compte déjà pour 5 cars ...)
[et de toute zone de texte par ailleurs en standard tel que décrit ci-dessous ]
1695238018176.png
 

fanch55

XLDnaute Barbatruc
Perso, je construis plutôt le supertip dans le code via le call back,
cela me permet un supertip approprié à un contexte, le retour à la ligne se faisant par un vblf:

VB:
Sub Get_Supertip(control As IRibbonControl, ByRef returnedVal)
Dim Rval As String, Line As String, I As Integer
    For I = 1 To 10: Line = Line & "----+----|": Next
    For I = 1 To 10
        If Rval = "" Then Rval = Line Else Rval = Rval & vbLf & Line
    Next
    If Len(Rval) > 1024 Then returnedVal = "Overflow, length=" & Len(Rval) Else returnedVal = Rval
End Sub
1695240652533.png
 

patricktoulon

XLDnaute Barbatruc
alors en ecriture ca va impec par contre en relecture l'orsque je réouvrait le projet
le "&#13;" ressortait comme des saut de ligne donc à la re sauvegarde je perdait tout repère
car les saut de ligne dans le customui c'est chr(32)+ un caractère inconnu+chr(10) donc pour le reconvertir c’était compliqué
donc je met en creation un"|" a la place des sauts de ligne je sauve avec l'ancienne fonction le projet
et quand je crée le fichier excel avec le customUI.xml final je le crée avec la fonction précédemment citée
terminé plus de problème de conversion
 

Statistiques des forums

Discussions
312 504
Messages
2 089 073
Membres
104 018
dernier inscrit
Mzghal