Lettura file xml con vba access

di il
34 risposte

34 Risposte - Pagina 2

  • Re: Lettura file xml con vba access

    +m2+ ha scritto:


    riddik ha scritto:



    a me non serve il body
    mi servono solo i dati generali e l'allegato (se esiste) il pdf
    allora è già più facile.
    per i dati generali sono "zzi tuoi" (non so aiutarti, non uso access, di sicuro qualcuno potrà darti informazioni più precise).

    per l'allegato - volendo - ho programmello che lo estrae (da riga di comando).
    qualcosa tipo
    xml2pdf.exe 10 c:\ilmiobelxml.p7m k:\cartellaoutput
    In attesa del 10 che migliorerà nettamente la situazione io ho risolto così... ma devo fare un passaggio in più ... sfruttando sempre il magnifico programmello di +m2+

    Dim Nomefile, SoloNome, FilePDF As String
    Nomefile = Me.PERCORSO & Me.NOME_FILE 'naturalmente percorso , nome file,nomeallegato li devo avere estrapolati prima e parcheggiati in una tabella
    SoloNome = Me.NOME_FILE
    FilePDF = Me.PERCORSO & Me.NOME_FILE & ".PDF"
    Call Shell("C:\Users\Mauro\Documents\XML2PDF\Xml2pdf.exe 5 " & Nomefile & " " & "C:\DOCUMENTI_ELETTRONICI_PARK\" & SoloNome & ".PDF") ' Questo passaggio mi serve per far creare nella cartella '\XML2PDF\felallegati l'allegato contenuto nell'xml

    ' Per aprire l'allegato io, per mie esigenze utilizzo un pulsante :
    Dim NomeAllegato, SoloPercorso, FilePDF As String
    Dim Posizione
    NomeAllegato = Me.NOME_ALLEGATO
    SoloPercorso = Me.NOME_FILE
    ' Per estrapolare il nome della cartella creata in felallegati devo togliere l'estensione dal nome del file
    Posizione = InStr(SoloPercorso, ".")
    SoloPercorso = Trim(Left(SoloPercorso, Posizione - 1)) & "\" & NomeAllegato
    FilePDF = "C:\Users\Mauro\Documents\XML2PDF\felallegati\" & SoloPercorso
    Call Shell("C:\WINDOWS\Explorer.exe " & FilePDF, 1) 'cosi apre solo l'allegato ,il pdf in automatico, lo zip no ,apre solo il suo contenuto
  • Re: Lettura file xml con vba access

    MARMAURO ha scritto:


    +m2+ ha scritto:


    riddik ha scritto:



    a me non serve il body
    mi servono solo i dati generali e l'allegato (se esiste) il pdf
    allora è già più facile.
    per i dati generali sono "zzi tuoi" (non so aiutarti, non uso access, di sicuro qualcuno potrà darti informazioni più precise).

    per l'allegato - volendo - ho programmello che lo estrae (da riga di comando).
    qualcosa tipo
    xml2pdf.exe 10 c:\ilmiobelxml.p7m k:\cartellaoutput
    In attesa del 10 che migliorerà nettamente la situazione io ho risolto così... ma devo fare un passaggio in più ... sfruttando sempre il magnifico programmello di +m2+

    https://ufile.io/1hlo
  • Re: Lettura file xml con vba access

    +m2+ ha scritto:


    MARMAURO ha scritto:


    +m2+ ha scritto:


    allora è già più facile.
    per i dati generali sono "zzi tuoi" (non so aiutarti, non uso access, di sicuro qualcuno potrà darti informazioni più precise).

    per l'allegato - volendo - ho programmello che lo estrae (da riga di comando).
    qualcosa tipo
    xml2pdf.exe 10 c:\ilmiobelxml.p7m k:\cartellaoutput
    In attesa del 10 che migliorerà nettamente la situazione io ho risolto così... ma devo fare un passaggio in più ... sfruttando sempre il magnifico programmello di +m2+

    https://ufile.io/1hlo
    Grazie Grazie Grazie .... velocissimo
    funziona perfettamente !!
    Ti chiedo solo una cosa se è fattibile... è possibile mantenere sempre lo stesso nome file e non crearne uno diverso con __00000001?
  • Re: Lettura file xml con vba access

    Non sovrascrive i file se presenti. Dovrei fare un po' di lavoro e non far nulla se già presente file binariamente identico.
    vedremo
  • Re: Lettura file xml con vba access

    +m2+ ha scritto:


    Non sovrascrive i file se presenti. Dovrei fare un po' di lavoro e non far nulla se già presente file binariamente identico.
    vedremo
    un'altra curiosità... non so se ti può essere utile... ho un allegato di un XML con questo nome :
    B_F_FR_V_B_017721_86_20190115150813904000.pdf
    ma estraendolo con il tuo programma (10) crea questo:
    B_F_FR_V_B_017721_86_2019011515081390400.pdf
    Manca uno Zero finale

    ci ho messo un po per accorgermi..ho sonno....non capivo perché non aprisse certi allegati
  • Re: Lettura file xml con vba access

    +m2+ ha scritto:


    Quindi avrebbe un utilizzo, un parsatore che scrivessse un file mdb?
    considerato che ognuno ha progettato il suo database a modo suo, sarebbe bello che qlc ci desse una mano a leggere in maniera corretta il file xml in modo tale che ognuno può prendere i dati che servono e memorizzarli nel proprio mdb.
    Io sono riuscito a leggere i singoli nodi utilizzando questa tecnica:
    Dim xmlDoc As DOMDocument
    Dim xmlElement As IXMLDOMElement
    Verifica = xmlDoc.Load(nomefile)
    Set xmlElement = xmlDoc.documentElement
    tipodocumento = xmlElement.selectSingleNode("FatturaElettronicaBody/DatiGenerali/DatiGeneraliDocumento/TipoDocumento").Text
    e funziona
    il problema sorge quando si vuol leggere un tag facoltativo xke si crea un errore di esecuzione
  • Re: Lettura file xml con vba access

    Per quanto riguarda l'allegato, di solito è un file pdf codificato in base64, per cui la strategia secondo me dovrebbe essere quella di decodificare l'allegato da base64 a normale, assegnarlo ad una variabile di grosse dimensioni e trovare il modo di aprire acrobat e farlo leggere da quella variabile (non so se si potrebbe fare, ma sarebbe bello fare tutti questi passaggi in memoria senza scrivere su disco)
    fatemi sapere se trovate qlc
    io ho trovato un decoder qui
    https://base64-encoderdecoder.windows10compatible.com
  • Re: Lettura file xml con vba access

    Considerato che la mia esigenza è quella di poter inserire le fatture elettroniche in maniera automatica in un mdb e di poter gestire le loro scadenze e i pagamenti oltre alla possibilità di poterle visionare dal partitario con un doppio click, poò essere comune a molti altri qui nel forum,
    sarebbe bello che ci mettessimo insieme ognuno con il suo contributo per realizzare tutto questo, ovviamente sperando che gli esperti ci possano aiutare. Sarebbe un bel esercizio per noi principianti.
    Chiedo consiglio ai moderatori del forum se fosse il caso di aprire un altra discussione o se continuare con questa.
    Saluti a tutti e buonanotte
  • Re: Lettura file xml con vba access

    MARMAURO ha scritto:


    un'altra curiosità... non so se ti può essere utile... ho un allegato di un XML con questo nome :
    B_F_FR_V_B_017721_86_20190115150813904000.pdf
    ma estraendolo con il tuo programma (10) crea questo:
    B_F_FR_V_B_017721_86_2019011515081390400.pdf
    Manca uno Zero finale

    ci ho messo un po per accorgermi..ho sonno....non capivo perché non aprisse certi allegati
    Purga il nome delle stringhe anche come lunghezza
  • Re: Lettura file xml con vba access

    riddik ha scritto:


    sarebbe bello che ci mettessimo insieme ognuno con il suo contributo per realizzare tutto questo,
    Per farlo mi bastano file xml da lavorare per evolvere il parser.
    domani salvo impegni faccio il popolatore mdb, non dovrebbe richiedere più di una mezz'ora.
    non ho però mai creato tabelle access, di solito leggo i dati.
    Vabbè vedremo
  • Re: Lettura file xml con vba access

    MARMAURO ha scritto:


    Ciao io importo in questo modo e se i nodi non esistono non mi da nessun errore funziona tutto correttamente ... almeno per le mie esigenze... sono in fase di test

    '==============================================================================================================================
    'APRO LA TABELLA PER RECUPERARE IL NOME FILE XML DA ELABORARE PER POTER AGGIORNARE I CAMPI CON I VALORI RECUPERATI DALL'XML STESSO
    '==============================================================================================================================
    Dim NomeFile, PercorsoCompleto As String

    ......

    Non sono un esperto ma a me funziona (ho provato solo con i nodi che vedete)...p.s. io prima ho creato una tabella dove vado ad elaborare solo i file aggiunti e non tutti ogni volta
    Grazie mille per le dritte!
    Seguo da profano la discussione, vediamo quale sarà il metodo migliore perchè vedo che in molti lo stiamo affrontando.
    Purtroppo non credo di poter riuscire a contribuire molto visto le mie conoscenze medio/basse del codice.
    Quello che posso fare è un po' il tester...ma sono sotto fino al 5 febbraio per l'audit della ISO9001 e di un'altra qualifica....
  • Re: Lettura file xml con vba access

    X +m2+,
    ti ringrazio ancora per il tuo programmino, è veramente prezioso...
  • Re: Lettura file xml con vba access

    riddik ha scritto:


    +m2+ ha scritto:


    Quindi avrebbe un utilizzo, un parsatore che scrivessse un file mdb?
    considerato che ognuno ha progettato il suo database a modo suo, sarebbe bello che qlc ci desse una mano a leggere in maniera corretta il file xml in modo tale che ognuno può prendere i dati che servono e memorizzarli nel proprio mdb.
    Io sono riuscito a leggere i singoli nodi utilizzando questa tecnica:
    Dim xmlDoc As DOMDocument
    Dim xmlElement As IXMLDOMElement
    Verifica = xmlDoc.Load(nomefile)
    Set xmlElement = xmlDoc.documentElement
    tipodocumento = xmlElement.selectSingleNode("FatturaElettronicaBody/DatiGenerali/DatiGeneraliDocumento/TipoDocumento").Text
    e funziona
    il problema sorge quando si vuol leggere un tag facoltativo xke si crea un errore di esecuzione
    Ma quale' il problema esattamente?
    Non ti basta intercettare l'errore e proseguire?
    Tanto sara' sempre lo stesso, il 91 o simili
  • Re: Lettura file xml con vba access

    riddik ha scritto:


    +m2+ ha scritto:


    Quindi avrebbe un utilizzo, un parsatore che scrivessse un file mdb?
    considerato che ognuno ha progettato il suo database a modo suo, sarebbe bello che qlc ci desse una mano a leggere in maniera corretta il file xml in modo tale che ognuno può prendere i dati che servono e memorizzarli nel proprio mdb.
    Io sono riuscito a leggere i singoli nodi utilizzando questa tecnica:
    Dim xmlDoc As DOMDocument
    Dim xmlElement As IXMLDOMElement
    Verifica = xmlDoc.Load(nomefile)
    Set xmlElement = xmlDoc.documentElement
    tipodocumento = xmlElement.selectSingleNode("FatturaElettronicaBody/DatiGenerali/DatiGeneraliDocumento/TipoDocumento").Text
    e funziona
    il problema sorge quando si vuol leggere un tag facoltativo xke si crea un errore di esecuzione
    Mi trovo a dover riprendere in mano la cosa...
    Sei riuscito a trovare una soluzione all'errore di esecuzione durante la lettura di un tag facoltativo? Oppure esiste un workaround?

    Grazie mille!
  • Re: Lettura file xml con vba access

    A dipendere da codice di altri, oltretutto non OPEN, è sempre una scelta complicata... credo la facciano in pochi... ma quei pochi poi...

    Da VBA si usa la classe DOM per leggere i file XML, oppure si scrive un parserino leggendo il file in modo sequenziale... ma chi sviluppa si scriverebbe una classe per avere poi a disposizione le ricerche che esponga i Tags e magari gerarchici(collection e calssi)... ecco quello che fa DOM... altrimenti devi rileggerlo 800 volte...
    Usarla non è immediato ma ci sono valanghe di esempi poi devi sbatterti a capirli, tradotto studiarli.
    Per gli allegati il codice che converte in Base64 è da copiaincollare... basta aprire in Binary il file Pdf e passarlo alla funzione.
    Si faceva la stessa cosa quando con la codifica MIME si allegavano i file alle mail o al contrario si decodificavano le mail estrapolando i dati degli allegati e li si processsava al contrario...

    Insomma queste cose vanno studiate... non si improvvisano, non si copiano...
Devi accedere o registrarti per scrivere nel forum
34 risposte