Passage xml vers csv - contraire de vbCrLf

capture

Bonjour,

Je suis novice dans le VBA et je fais face à un problème. J'ai réussi tant bien que mal à bidouiller un morceau de code qui me permet, à partir d'un fichier xml, de créer un fichier csv. Mon problème est que mon code créé un une ligne supplémentaire dans mon fichier final à cause de la boucle suivante :

    For Each operatorNode In operatorNodes
        Dim alpsidOperator As String
        alpsidOperator = operatorNode.SelectSingleNode("ALPSID_OPERATOR").Text

        Dim day As String
        day = operatorNode.SelectSingleNode("DAY").Text

        Dim payWorkingTime As String
        payWorkingTime = operatorNode.SelectSingleNode("PAY_WORKING_TIME").Text

        output = output & alpsidOperator & ",," & "SBBFV-CH,SBBFV,NON-WORK,,,,,,,SBBFV-CH,,," & vbCrLf
        output = output & alpsidOperator & ",," & "SBBFV-CH,SBBFV,,," & "507510," & Format(Now(), "yyyy-mm-dd\THH:MM:SS+02:00") & ",,," & payWorkingTime & ",SBBFV-CH," & Format(day, "yyyy-mm-dd\THH:MM:SS+00:00") & ",," & vbCrLf
    Next operatorNode

Je l'ai remarqué en utilisant Notepad++ sur le fichier csv créé.

Ma question est donc : est-il possible de rajouter une ligne après le next qui supprimerait ces deux lignes?

le code total est le suivant :

    Dim filePath As Variant
    filePath = Application.GetOpenFilename("XML Files (*.xml),*.xml", , "Please select an XML file")

    If filePath = False Then Exit Sub

    Dim xmlDoc As Object
    Set xmlDoc = CreateObject("MSXML2.DOMDocument.6.0")
    xmlDoc.async = False
    xmlDoc.validateOnParse = False
    xmlDoc.Load (filePath)

    Dim operatorNodes As Object
    Set operatorNodes = xmlDoc.SelectNodes("//OPERATOR")

    Dim output As String
    output = "LABORCODE,LABTRANSID,ORGID_1,SITEID,TRANSTYPE,ATTENDANCEID,ENTERBY,ENTERDATE,FINISHDATE,FINISHTIME,LABORHOURS,ORGID,STARTDATE,STARTTIME,TRANSDATE" & vbCrLf

    Dim operatorNode As Object
    For Each operatorNode In operatorNodes
        Dim alpsidOperator As String
        alpsidOperator = operatorNode.SelectSingleNode("ALPSID_OPERATOR").Text

        Dim day As String
        day = operatorNode.SelectSingleNode("DAY").Text

        Dim payWorkingTime As String
        payWorkingTime = operatorNode.SelectSingleNode("PAY_WORKING_TIME").Text

        output = output & alpsidOperator & ",," & "SBBFV-CH,SBBFV,NON-WORK,,,,,,,SBBFV-CH,,," & vbCrLf
        output = output & alpsidOperator & ",," & "SBBFV-CH,SBBFV,,," & "507510," & Format(Now(), "yyyy-mm-dd\THH:MM:SS+02:00") & ",,," & payWorkingTime & ",SBBFV-CH," & Format(day, "yyyy-mm-dd\THH:MM:SS+00:00") & ",," & vbCrLf
    Next operatorNode

    Dim csvPath As String
    csvPath = Left(filePath, Len(filePath) - 3) & "csv"

    Open csvPath For Output As #1
    Print #1, output
    Close #1

    MsgBox "CSV file saved at " & csvPath

merci pour votre aide!

Excellente soirée

Cordialement

Pierre

Hello,

Je ne connais pas le traitement de fichier xml mais ce que je ferai c'est :

1 - compter le nombre de nodes

2-Si je suis dans le dernier nodes alors je n'ajoute pas le vbctrl et sinon je l'ajoute

Ce qui donnerai qqch comme ça :

dim lngNodes as long, lngTmp as long
lngNodes  = operatorNodes.count

    Dim operatorNode As Object
    For Each operatorNode In operatorNodes
      lngTmp  = lngTmp +1
        ....
        ....

        .....
        output = output & alpsidOperator & ",," & "SBBFV-CH,SBBFV,,," & "507510," & Format(Now(), "yyyy-mm-dd\THH:MM:SS+02:00") & ",,," & payWorkingTime & ",SBBFV-CH," & Format(day, "yyyy-mm-dd\THH:MM:SS+00:00") & ",," &  iif(lngTmp  < lngNodes,vbCrLf,vbnullstring)
    Next operatorNode

Salut Rag02700,

Merci pour ton aide et ta proposition! Je l'ai testée et elle fonctionne avec ce petit changement : .count >> .length.

dim lngNodes as long, lngTmp as long
lngNodes  = operatorNodes.Length

    Dim operatorNode As Object
    For Each operatorNode In operatorNodes
      lngTmp  = lngTmp +1
        ....
        ....

        .....
        output = output & alpsidOperator & ",," & "SBBFV-CH,SBBFV,,," & "507510," & Format(Now(), "yyyy-mm-dd\THH:MM:SS+02:00") & ",,," & payWorkingTime & ",SBBFV-CH," & Format(day, "yyyy-mm-dd\THH:MM:SS+00:00") & ",," &  iif(lngTmp  < lngNodes,vbCrLf,vbnullstring)
    Next operatorNode

Pour ceux qui pourraient en avoir besoin je vous remets le code complet :

Sub XMLtoCSV()
    Dim filePath As Variant
    filePath = Application.GetOpenFilename("XML Files (*.xml),*.xml", , "Please select an XML file")

    If filePath = False Then Exit Sub

    Dim xmlDoc As Object
    Set xmlDoc = CreateObject("MSXML2.DOMDocument.6.0")
    xmlDoc.async = False
    xmlDoc.validateOnParse = False
    xmlDoc.Load (filePath)
    Dim operatorNodes As Object
    Set operatorNodes = xmlDoc.SelectNodes("//OPERATOR")
    Dim lngNodes As Long, lngTmp As Long
    lngNodes = operatorNodes.Length
    Dim output As String
    output = "LABORCODE,LABTRANSID,ORGID_1,SITEID,TRANSTYPE,ATTENDANCEID,ENTERBY,ENTERDATE,FINISHDATE,FINISHTIME,LABORHOURS,ORGID,STARTDATE,STARTTIME,TRANSDATE" & vbCrLf

    Dim operatorNode As Object
    For Each operatorNode In operatorNodes
        lngTmp = lngTmp + 1
        Dim alpsidOperator As String
        alpsidOperator = operatorNode.SelectSingleNode("ALPSID_OPERATOR").Text

        Dim day As String
        day = operatorNode.SelectSingleNode("DAY").Text

        Dim payWorkingTime As String
        payWorkingTime = operatorNode.SelectSingleNode("PAY_WORKING_TIME").Text

        output = output & alpsidOperator & ",," & "SBBFV-CH,SBBFV,NON-WORK,,,,,,,SBBFV-CH,,," & vbCrLf
        output = output & alpsidOperator & ",," & "SBBFV-CH,SBBFV,,," & "507510," & Format(Now(), "yyyy-mm-dd\THH:MM:SS+02:00") & ",,," & payWorkingTime & ",SBBFV-CH," & Format(day, "yyyy-mm-dd\THH:MM:SS+00:00") & ",," & IIf(lngTmp < lngNodes, vbCrLf, vbNullString)
    Next operatorNode

    Dim csvPath As String
    csvPath = Left(filePath, Len(filePath) - 3) & "csv"

    Open csvPath For Output As #1
    Print #1, output
    Close #1

    MsgBox "CSV file saved at " & csvPath
End Sub

Excellente soirée à tous!

Cordialement,

Rechercher des sujets similaires à "passage xml csv contraire vbcrlf"