+ Rispondi al Thread
Visualizzazione dei risultati da 1 a 9 su 9

Discussione: Apertura file in XML e salvataggio con nome presente in una cella

  1. #1
    robybarc non è in linea Novello
    Luogo
    Bergamo
    Post
    19

    Apertura file in XML e salvataggio con nome presente in una cella

    Ciao a tutti,
    con questa macro vorrei aprire il file FE.xml e salvarlo con il nome contenuto in una cella dello stesso file.
    Alla cella ( che è A30 e contiene 00034_IT01234567890 ) ho dato il nome NomeFileFE
    Ho provato in decine di modi diversi ma non ci riesco
    Grazie

    Sub ApriXml()
    ChDir "E:\FattureFE"
    Workbooks.OpenXML Filename:="E:\FattureFE\FE.xml", LoadOption:= _
    xlXmlLoadImportToList
    ActiveWorkbook.SaveAsXMLData Filename:="E:\FattureFE\NomeFileFE.xml", Map:= _
    ActiveWorkbook.XmlMaps("FatturaElettronica_mapping ")
    ActiveWindow.Close False
    End Sub

  2. #2
    L'avatar di AntonioG
    AntonioG non è in linea Moderatore Globale Ultimo blog: Commodore 64 e Codemotion
    Luogo
    Roma
    Post
    16,158
    Blogs
    5
    Usa i tag code per il codice.
    Avvisi generali e importanti, a pena CHIUSURA thread e/o BAN
    Il crossposting è vietato.
    Le richieste di "pappa pronta" sono vietate.
    Utilizzate i tag CODE per il codice.
    Leggere il Regolamento per chiarimenti PRIMA di creare nuovi thread.
    Utilizzare sempre i PM per comunicare con i moderatori.
    Non mi contattate in PM per problemi di software, usate il forum

  3. #3
    robybarc non è in linea Novello
    Luogo
    Bergamo
    Post
    19
    Ciao a tutti,
    con questa macro vorrei aprire il file FE.xml e salvarlo con il nome contenuto in una cella dello stesso file.
    Alla cella ( che è A30 e contiene 00034_IT01234567890 ) ho dato il nome NomeFileFE
    Ho provato in decine di modi diversi ma non ci riesco
    Grazie
    codice:
    Sub ApriXml()
    ChDir "E:\FattureFE"
    Workbooks.OpenXML Filename:="E:\FattureFE\FE.xml", LoadOption:= _
    xlXmlLoadImportToList
    ActiveWorkbook.SaveAsXMLData Filename:="E:\FattureFE\NomeFileFE.xml", Map:= _
    ActiveWorkbook.XmlMaps("FatturaElettronica_mapping ")
    ActiveWindow.Close False
    End Sub

  4. #4
    L'avatar di TheTruster
    TheTruster non è in linea Moderatore Globale Ultimo blog: Mouse Wheel in Visual Basic 6 - ActiveX
    Luogo
    Messina - Italy
    Post
    7,172
    Blogs
    3
    Prima di tutto, se vuoi utilizzare il valore presente in una cella, devi leggerlo, in qualche modo.

    Gli oggetti Range, che possono riferirsi anche a celle singole, possiedono la proprietà Value, che restituisce proprio il testo in essi contenuto.
    Ovviamente per utilizzare il dato all'interno del tuo codice devi utilizzare una variabile opportunamente dichiarata, alla quale assegnare il valore proveniente dalla proprietà Value del Range.

    Fatto questo, potrai utilizzare tranquillamente la tua variabile per aprire/salvare un file che sia nominato come indicato nella cella A30.

    Ti consiglio vivamente di aprire la guida in linea di Excel (tramite F1) e studiare l'oggetto "Range" e la relativa proprietà "Value".

    TheTruster
    Il Crossposting è vietato dalla Netiquette!




  5. #5
    robybarc non è in linea Novello
    Luogo
    Bergamo
    Post
    19
    Ciao Truster,
    grazie per il consiglio, ho cercato di studiarmi gli oggetti Range e le proprietà Value ma il risultato è un gran mal di testa.
    non riesco in alcun modo a salvare il file generato con il nome contenuto nella cella A30.
    ho provato a fare delle prove inserendo vari codici tra altri codici senza nessun risultato,
    la macro che sto cercando di correggere è questa:

    codice:
    Sub SaveAsXml()
    Dim Fso As Object, Origine As Object, Destinazione As Object, Fo As Object, Fd As Object
    Dim Tn, Nome As String, I As Long, sInput As String
    
    '    Dim Tn, NomeFileFe As String, I As Long, sInput As String
    '    NomeFileFe = Range("A30")
    
        Application.DisplayAlerts = False
        Tn = Split(ThisWorkbook.Name, ".")
        For I = LBound(Tn) To UBound(Tn) - 1
            Nome = Nome & Tn(I) & "."
            
    '    assegnando a Nome il contenuto della cella A30 & "."
    '    NomeFileFe = NomeFileFe & Tn(I) & "."
    '    Nome = NomeFileFe & Tn(I) & "."
            
        Next I
        
        '    Dim Path As String ' PROVA
    '    Path = "E:\FattureFE\"
    '    fname = ThisWorkbook.Path & "\" & NomeFileFe & "xml" ' mi salva con il nome xml
    '    fname = ThisWorkbook.Path & "\" & Nome & "xml"
    '  ActiveWorkbook.SaveAs Filename:=Path & Filename & ".xlm", FileFormat:=xlNormal 'PROVA
    
        fname = ThisWorkbook.Path & "\" & Nome & "xml"
        ThisWorkbook.SaveAsXMLData Filename:=fname, Map:= _
            ThisWorkbook.XmlMaps("FatturaElettronica_mapping")
        Application.DisplayAlerts = True
        Set Fso = CreateObject("Scripting.FileSystemObject")
        Set Fo = Fso.GetFile(fname)
        Set Origine = Fo.OpenAsTextStream(1, -2)
        Fso.CreateTextFile ThisWorkbook.Path & "\Temp_" & Nome & "xml"
        Set Fd = Fso.GetFile(ThisWorkbook.Path & "\Temp_" & Nome & "xml")
        
        '    Fso.CreateTextFile ThisWorkbook.Path & "\Temp_" & NomeFileFe & "xml"
    '    Set Fd = Fso.GetFile(ThisWorkbook.Path & "\Temp_" & NomeFileFe & "xml")
    
        Set Destinazione = Fd.OpenAsTextStream(2, -2)
        I = 0
        With Origine
            For I = 1 To 2
                sInput = .readline
            Next
            sInput = "<?xml version=""" & "1.0" & """ encoding=" & """UTF-8""" & "?>"
            Destinazione.writeline sInput
            sInput = "<?xml-stylesheet type=""" & "text/xsl""" & " href=""" & "fatturapa_v1.0.xsl""" & "?>"
            Destinazione.writeline sInput
            sInput = "<p:FatturaElettronica versione=""" & "1.0"""
            Destinazione.writeline sInput
            sInput = "xmlns:ds=""" & "http://www.w3.org/2000/09/xmldsig#"""
            Destinazione.writeline sInput
            sInput = "xmlns:p=""" & "http://www.fatturapa.gov.it/sdi/fatturapa/v1.0"""
            Destinazione.writeline sInput
            sInput = "xmlns:xsi=""" & "http://www.w3.org/2001/XMLSchema-instance""" & ">"
            Destinazione.writeline sInput
            
            While Not .AtEndOfStream
                sInput = .readline
                If .AtEndOfStream Then Destinazione.writeline "</p:FatturaElettronica>" Else Destinazione.writeline sInput
            Wend
        End With
        Origine.Close
        Destinazione.Close
        
        '    NomeFileFe = Fo.Name
    
        Nome = Fo.Name
        Fo.Delete
        
        '    Fd.Name = NomeFileFe
    
        Fd.Name = Nome
        Set Fo = Nothing
        Set Fd = Nothing
        Set Origine = Nothing
        Set Destinazione = Nothing
        Set Fso = Nothing
    End Sub

    le prove le ho fatte precedere dal segno '
    il codice così come è salva il file.xml nella stessa cartella del file che lo genera.
    Se ti interessa vedere il file di esempio le trovi a questo link.

    https://www.dropbox.com/s/2f6efa8wej...rWeb.xlsm?dl=0

    Grazie della pazienza e scusate la mia ignoranza in materia.
    Roberto

  6. #6
    L'avatar di TheTruster
    TheTruster non è in linea Moderatore Globale Ultimo blog: Mouse Wheel in Visual Basic 6 - ActiveX
    Luogo
    Messina - Italy
    Post
    7,172
    Blogs
    3
    Perdonami se te lo dico, ma nel tuo codice c'è una gran confusione...

    Innanzi tutto nella cella A30, a guardare il file di esempio che hai postato, non c'è nessun dato relativo al nome che dovrà avere il file xml risultante.
    Inoltre tutta la sequela di righe commentate non chiarisce cosa stai facendo e se, nel caso, lo stai facendo nel modo giusto.
    La cosa migliore da fare è "purgare" il codice da tutto ciò che non serve, impostare dei punti di interruzione nei punti chiave ed eseguirlo in debug. Solo così puoi avere idea del valore che assume una variabile in un determinato momento, controllando che una stringa sia concatenata per bene, che il file abbia il nome che ti aspetti, etc.

    Riguardo il salvataggio nella stessa cartella del file Excel, mi pare del tutto normale, considerato il tuo codice...
    Se usi ThisWorkbook.Path, per determinare il percorso che avrà il file, mi pare logico che questo debba necessariamente finire nella stessa cartella del Workbook.

    TheTruster
    Il Crossposting è vietato dalla Netiquette!




  7. #7
    robybarc non è in linea Novello
    Luogo
    Bergamo
    Post
    19
    Ciao Truster, è un gran casino lo so ma sono alle prime armi e mi arrangio come posso,
    comunque ho risolto in questo modo.
    Nella cella A30 viene inserito un nuovo valore ad ogni stampa fattura, (il codice che ho postato è solo la parte che salva il documento)
    Grazie
    Roberto


    codice:
    Dim Fso As Object, Origine As Object, Destinazione As Object, Fo As Object, Fd As Object
    Dim Tn, Nome As String, I As Long, sInput As String
        Application.DisplayAlerts = False
        Tn = Split(ThisWorkbook.Name, ".")
        For I = LBound(Tn) To UBound(Tn) - 1
        Nome = Nome & Tn(I) & "."
        Next I
        fname = ThisWorkbook.Path & "\" & Sheets("FE").Range("A30") & ".xml"
        ThisWorkbook.SaveAsXMLData Filename:=fname, Map:= _
            ThisWorkbook.XmlMaps("FatturaElettronica_mapping")
        Application.DisplayAlerts = True
        Set Fso = CreateObject("Scripting.FileSystemObject")
        Set Fo = Fso.GetFile(fname)
        Set Origine = Fo.OpenAsTextStream(1, -2)
        Fso.CreateTextFile ThisWorkbook.Path & "\Temp_" & Nome & "xml"
        Set Fd = Fso.GetFile(ThisWorkbook.Path & "\Temp_" & Nome & "xml")
        Set Destinazione = Fd.OpenAsTextStream(2, -2)
        I = 0
        With Origine
            For I = 1 To 2
                sInput = .readline
            Next
            sInput = "<?xml version=""" & "1.0" & """ encoding=" & """UTF-8""" & "?>"
            Destinazione.writeline sInput
            sInput = "<?xml-stylesheet type=""" & "text/xsl""" & " href=""" & "fatturapa_v1.0.xsl""" & "?>"
            Destinazione.writeline sInput
            sInput = "<p:FatturaElettronica versione=""" & "1.0"""
            Destinazione.writeline sInput
            sInput = "xmlns:ds=""" & "http://www.w3.org/2000/09/xmldsig#"""
            Destinazione.writeline sInput
            sInput = "xmlns:p=""" & "http://www.fatturapa.gov.it/sdi/fatturapa/v1.0"""
            Destinazione.writeline sInput
            sInput = "xmlns:xsi=""" & "http://www.w3.org/2001/XMLSchema-instance""" & ">"
            Destinazione.writeline sInput
            
            While Not .AtEndOfStream
                sInput = .readline
                If .AtEndOfStream Then Destinazione.writeline "</p:FatturaElettronica>" Else Destinazione.writeline sInput
            Wend
        End With
        Origine.Close
        Destinazione.Close
        Nome = Fo.Name
        Fo.Delete
        Fd.Name = Nome
        Set Fo = Nothing
        Set Fd = Nothing
        Set Origine = Nothing
        Set Destinazione = Nothing
        Set Fso = Nothing
    Ultima modifica di robybarc; 02-01-2019 08:25 

  8. #8
    L'avatar di TheTruster
    TheTruster non è in linea Moderatore Globale Ultimo blog: Mouse Wheel in Visual Basic 6 - ActiveX
    Luogo
    Messina - Italy
    Post
    7,172
    Blogs
    3
    Quote Originariamente inviato da robybarc Visualizza il messaggio
    è un gran casino lo so ma sono alle prime armi e mi arrangio come posso
    Proprio perchè sei alle prime armi, ti converrebbe affrontare la cosa con un po' di studio. Tutto quello che accrocchi adesso non saprai districarlo domani...
    La cultura del "basta che funzioni" crea non pochi problemi quando, inevitabilmente, si dovrà rimettere mano al codice.

    TheTruster
    Il Crossposting è vietato dalla Netiquette!




  9. #9
    robybarc non è in linea Novello
    Luogo
    Bergamo
    Post
    19
    Parole sante, infatti passo molto tempo a studiare il VBA passando da un manuale all'altro, ma alcuni concetti mi sono incomprensibili nonostante cerchi di approfondirli, forse perché inizialmente usavo le vecchie macro4.0 e passare al VBA non è stato semplice.
    Grazie e faro più tesoro del consiglio.
    Roberto

+ Rispondi al Thread

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi