Acquista i nostri libri consigliati su Amazon.it
+ Rispondi al messaggio
Visualizzazione dei risultati da 1 a 9 su 9

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

  1. #1
    robybarc non è in linea Novello
    Post
    19
    Like Inviati  
    0
    Like Ricevuti  
    0
    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
    Post
    17,374
    Blogs
    5
    Like Inviati  
    5
    Like Ricevuti  
    31
    Usa i tag code per il codice.
    ℹ️ Leggi di più su AntonioG ...

  3. #3
    robybarc non è in linea Novello
    Post
    19
    Like Inviati  
    0
    Like Ricevuti  
    0
    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
    

  4. #4
    L'avatar di TheTruster
    TheTruster non è in linea Moderatore Globale Ultimo blog: Mouse Wheel in Visual Basic 6 - ActiveX
    Post
    7,214
    Blogs
    3
    Like Inviati  
    17
    Like Ricevuti  
    9
    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
    ℹ️ Leggi di più su TheTruster ...

  5. #5
    robybarc non è in linea Novello
    Post
    19
    Like Inviati  
    0
    Like Ricevuti  
    0
    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:

    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
    Post
    7,214
    Blogs
    3
    Like Inviati  
    17
    Like Ricevuti  
    9
    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
    ℹ️ Leggi di più su TheTruster ...

  7. #7
    robybarc non è in linea Novello
    Post
    19
    Like Inviati  
    0
    Like Ricevuti  
    0
    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


    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 09:25 

  8. #8
    L'avatar di TheTruster
    TheTruster non è in linea Moderatore Globale Ultimo blog: Mouse Wheel in Visual Basic 6 - ActiveX
    Post
    7,214
    Blogs
    3
    Like Inviati  
    17
    Like Ricevuti  
    9
    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
    ℹ️ Leggi di più su TheTruster ...

  9. #9
    robybarc non è in linea Novello
    Post
    19
    Like Inviati  
    0
    Like Ricevuti  
    0
    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 messaggio

Potrebbero interessarti anche ...

  1. Risposte: 16
    Ultimo Post: 14-05-2016, 01:00
  2. apertura file excel-ordinamento dati e salvataggio
    Da eurostar_italia nel forum Visual Basic 6
    Risposte: 2
    Ultimo Post: 25-08-2011, 19:29
  3. aprire file con nome file su cella
    Da andreino nel forum Microsoft Word
    Risposte: 11
    Ultimo Post: 19-07-2010, 17:12
  4. scrivere parte del nome di un file su cella
    Da andreino nel forum Microsoft Word
    Risposte: 1
    Ultimo Post: 07-07-2010, 20:04
  5. Risposte: 7
    Ultimo Post: 05-06-2008, 21:44