Risultati da 1 a 8 di 8

Discussione: Macro copia pdf

  1. #1
    Utente Standard L'avatar di Davimont
    Iscritto dal
    2007
    Messaggi
    487
    Professione
    Disegnatore meccanico Fai da te.
    Regione
    Lombardia
    Software
    Solid Edge ST8

    Predefinito Macro copia pdf

    Dopo diverse ore a provare e riprovare e grazie ai preziosi consigli di Vespa e Be_on_edge
    sono riuscito a creare la mia prima macro.
    Non sono partito da zero ma ho modificato una macro di Vespa (grazie di nuovo).
    La macro è sicuramente migliorabile ma per il mio scopo funziona.
    Nella directory dei miei assiemi ci sono anche i draft. Qui creo una sotto cartella di nome "PDF-DXF" e dentro ci piazzo i pdf delle tavole e relativo dxf di taglio del particolare. Faccio principalmente lamiere.

    Ora la macro legge un'elenco di parti e cerca nella sotto cartella il relativo pdf. Se è presente allora lo copia in una cartella specificata nel codice.

    Prossimo passo è elencare i file dove non è stato possibile copiare il file e successivamente integrare anche la copia dei dxf.
    SalvaPDF v01.7z
    Alla riga 97 si specifica il percorso di salvataggio della cartella che conterrà i file.
    Commenti e correzioni sono ben accetti.
    Imparare è un'esperienza; tutto il resto è solo informazione. A. Einstein

  2. #2
    Utente Standard
    Iscritto dal
    2008
    Messaggi
    952
    Professione
    disegnatore
    Regione
    Romagna
    Software
    Solid Edge

    Predefinito

    Ciao, bravo!
    dovresti migliorare la descrizione, ... se ho capito bene dovrebbe essere:
    Partendo da un Elenco Parti in Draft, per ogni parte viene cercato un omonimo pdf in una sottocartella "PDF-DXF", se il pdf esiste, viene copiato in un'altra cartella es.: "Sviluppi" .

    Un altro utente qualche settimana fa "aggiornava" lo sviluppo dxf e pdf, suggerivo si basarsi sulle date di ultima modifica, diventa un lavoro lungo ma ben fatto... Magari avete esigenze simili e potresti contattarlo.

    Ti scrivo alcune note sul tuo codice.
    "part_name" dichiarato ma non usato

    aa=split (part_name,".")

    non funzionerà per percorsi file conteneti punti "." come "C:\disegni\2016.01\file.01.par"
    Puoi usare (valido per estensioni a tre caratteri, come in solidedge):
    Codice:
    Left(name, Len(name) - 4)
    oppure metti in fondo una funzione e la usi (trovata in internet):
    Codice:
    Function GetFilenameWithoutExtension(FileName)
      Dim Result, i
      Result = FileName
      i = InStrRev(FileName, ".") ' Cerca a partire da Destra il carattere e restituisce la sua posizione (da sinistra)
      If ( i > 0 ) Then
        Result = Mid(FileName, 1, i - 1)
      End If
      GetFilenameWithoutExtension = Result
    End Function
    da notare che in solidEdge gli assiemi possono essere: "C:\percorso\file.asm!Configurazione.FamigliaDiAss ieme"
    Quindi prima o poi si dovrà cercare o scrivere una funzione ad-hoc.

    "Path_Save", "name_cart" visto che sono un "User Settings" si possono spostare all'inizio del codice, nelle prime 10 righe, dovrebbe funzionare. Battezzare le variabili non è facile, mescolare nel nome inglese e italiano non è il massimo.

    idem per "pdf_folder" con la differenza che stai impostando un percorso relativo al percorso del draft, esempio:
    ' Setting utente
    pdf_folder_relative_to_dft = "\PDF-DXF\ <da adattare>''
    ' .\ stessa cartella
    ' ..\ risali di un livello

    ...
    pdf_folder = dft_folder + pdf_folder_relative_to_dft

    In un altra discussione volevi nascondere le righe dell'Elenco Parti in base a una Proprietà. Ti faccio presente in questa macro invece passi tutte le righe della tabella, quindi anche quelle nascoste, saranno molti i pdf che non trova, poco male se si tratta di bulloneria.
    Al momento rimani due rischi residui:
    - il nuovo particolare a disegno manca (di draft e) di pdf e non te ne accorgi;
    - la data di ultima modifica del 3D è più recente del pdf (è maggiore) , quindi il pdf potrebbe essere obsoleto. ... .D'altra parte è inutilmente dispendioso riconvertire in dxf e pdf quando non serve.

  3. #3
    Utente Standard L'avatar di Davimont
    Iscritto dal
    2007
    Messaggi
    487
    Professione
    Disegnatore meccanico Fai da te.
    Regione
    Lombardia
    Software
    Solid Edge ST8

    Predefinito

    Citazione Originariamente Scritto da vespa_83 Visualizza Messaggio
    Ciao, bravo!
    dovresti migliorare la descrizione, ... se ho capito bene dovrebbe essere:
    Partendo da un Elenco Parti in Draft, per ogni parte viene cercato un omonimo pdf in una sottocartella "PDF-DXF", se il pdf esiste, viene copiato in un'altra cartella es.: "Sviluppi" .
    Hai capito benissimo. La tua descrizione mi piace.

    Citazione Originariamente Scritto da vespa_83 Visualizza Messaggio
    Un altro utente qualche settimana fa "aggiornava" lo sviluppo dxf e pdf, suggerivo si basarsi sulle date di ultima modifica, diventa un lavoro lungo ma ben fatto... Magari avete esigenze simili e potresti contattarlo.
    Tornerebbe utile se dovessi confrontare i file di due cartelle differenti ma non è il mio caso. La cartella PDF-DXF contiene sempre e solo l'ultima versione e se il nome file coincide allora è quello giusto.
    Discorso leggermente diverso per la revisione (riportata nel nome del file) Più avanti vorrei controllare se di un determinato file esiste una revisionesuccessiva.
    Non andrei a interrgogare la variabile interna del file ma mi baserei su quella scritta nel nome file.
    Per molti non sarà l'ideale ma devo adattarmi alla codifica adottata qui.

    Citazione Originariamente Scritto da vespa_83 Visualizza Messaggio
    Ti scrivo alcune note sul tuo codice.
    "part_name" dichiarato ma non usato
    Forse non ho capito cosa intendi. Non la uso subito dopo con lo split?

    Citazione Originariamente Scritto da vespa_83 Visualizza Messaggio
    aa=split (part_name,".")

    non funzionerà per percorsi file conteneti punti "." come "C:\disegni\2016.01\file.01.par"
    Puoi usare (valido per estensioni a tre caratteri, come in solidedge):
    Codice:
    Left(name, Len(name) - 4)
    oppure metti in fondo una funzione e la usi (trovata in internet):
    Codice:
    Function GetFilenameWithoutExtension(FileName)
      Dim Result, i
      Result = FileName
      i = InStrRev(FileName, ".") ' Cerca a partire da Destra il carattere e restituisce la sua posizione (da sinistra)
      If ( i > 0 ) Then
        Result = Mid(FileName, 1, i - 1)
      End If
      GetFilenameWithoutExtension = Result
    End Function
    da notare che in solidEdge gli assiemi possono essere: "C:\percorso\file.asm!Configurazione.FamigliaDiAss ieme"
    Quindi prima o poi si dovrà cercare o scrivere una funzione ad-hoc.
    Allora, il tuo ragionamento è giusto. Io odio mettere i punti nei nomi file abituato da quando non si poteva fare, e quindi non avrei il problema.
    Ho comunque modificato con il codice da te suggerito ma modificando a -6 l'arretramento dei caratteri perchè se visualizzo il nome prima del trattamento vedo che ha dopo l'estensione ":N" che riporta il numero del particolare in assieme.

    Il discorso configurazioni per ora lo salto perchè cerco di non usarle.

    Citazione Originariamente Scritto da vespa_83 Visualizza Messaggio
    "Path_Save", "name_cart" visto che sono un "User Settings" si possono spostare all'inizio del codice, nelle prime 10 righe, dovrebbe funzionare. Battezzare le variabili non è facile, mescolare nel nome inglese e italiano non è il massimo.
    Sono un pasticcione , le variabili le chiamo come mi passa per la testa in quel momento.
    Ho spostato in cima le due righe.

    Citazione Originariamente Scritto da vespa_83 Visualizza Messaggio
    idem per "pdf_folder" con la differenza che stai impostando un percorso relativo al percorso del draft, esempio:
    ' Setting utente
    pdf_folder_relative_to_dft = "\PDF-DXF\ <da adattare>''
    ' .\ stessa cartella
    ' ..\ risali di un livello

    ...
    pdf_folder = dft_folder + pdf_folder_relative_to_dft
    Avevo pensato ai percorsi relativi ma al momento non sapevo come fare.

    Citazione Originariamente Scritto da vespa_83 Visualizza Messaggio
    In un altra discussione volevi nascondere le righe dell'Elenco Parti in base a una Proprietà. Ti faccio presente in questa macro invece passi tutte le righe della tabella, quindi anche quelle nascoste, saranno molti i pdf che non trova, poco male se si tratta di bulloneria.
    Al momento rimani due rischi residui:
    - il nuovo particolare a disegno manca (di draft e) di pdf e non te ne accorgi;
    - la data di ultima modifica del 3D è più recente del pdf (è maggiore) , quindi il pdf potrebbe essere obsoleto. ... .D'altra parte è inutilmente dispendioso riconvertire in dxf e pdf quando non serve.
    Il codice di partenza è proprio quello
    Ho dovuto ragiorarci un attimo per capire a cosa ti riferissi.
    Poi ho capito dove stava l'inghippo. La macro che filtra l'elenco pensavo (senza aver controllato) che escludesse dall'elenco le parti e non che le nascondesse.
    Si effettivamente passa in rassegna tutte le voci comprese quelle nascoste.
    Diciamo che la macro per filtrare l'elenco non la uso per creare l'elenco parti da mandare al carpentiere e quindi non ho il problema ma devo tenerlo presente.

    La segnalazione del pdf mancante la stavo già valutando e sarà una futura integrazione insieme al salvataggio del dxf.
    Non mi baso sulle date. Se poi modifico un particolare, aggiorno anche il dxf e pdf. Se invece me lo dimentico

    Grazie per la consulenza e i preziosi consigli.
    Essendo molto personalizzata come macro non so se potrà tornare utile ad altri ma magari come base per altro potrebbe servire.
    Imparare è un'esperienza; tutto il resto è solo informazione. A. Einstein

  4. #4
    Moderatore L'avatar di Be_on_edge
    Iscritto dal
    2007
    Messaggi
    2763
    Professione
    Progettazione
    Regione
    Emilia Romagna
    Software
    Solid Edge

    Predefinito

    Citazione Originariamente Scritto da Davimont Visualizza Messaggio
    Ho comunque modificato con il codice da te suggerito ma modificando a -6 l'arretramento dei caratteri perchè se visualizzo il nome prima del trattamento vedo che ha dopo l'estensione ":N" che riporta il numero del particolare in assieme.
    Attenzione che N è 1 carattere quando vale da 1 a 9 ma poi sono 2 caratteri da 10 a 99 e così via.

    La funzione proposta da Gianluca invece trova l'ultimo carattere "." e tronca via tutto quello che c'è dopo dandoti sempre un risultato corretto:

    Codice:
    Function GetFilenameWithoutExtension(FileName)
      Dim Result, i
      Result = FileName
      i = InStrRev(FileName, ".") ' Cerca a partire da Destra il carattere e restituisce la sua posizione (da sinistra)
      If ( i > 0 ) Then
        Result = Mid(FileName, 1, i - 1)
      End If
      GetFilenameWithoutExtension = Result
    End Function
    Visto che sei un programmatore in erba ti consiglio di iniziare a sfruttare le funzioni che ti semplificano molto la vita e rendono il codice molto più leggibile.

    Ciao
    Francesco
    Cintura nera di solid edge

  5. #5
    Utente Standard
    Iscritto dal
    2008
    Messaggi
    952
    Professione
    disegnatore
    Regione
    Romagna
    Software
    Solid Edge

    Predefinito

    Citazione Originariamente Scritto da Davimont Visualizza Messaggio
    Forse non ho capito cosa intendi. Non la uso subito dopo con lo split?
    Ehm.. ho sbagliato variabile.

    Citazione Originariamente Scritto da Davimont Visualizza Messaggio

    Allora, il tuo ragionamento è giusto. Io odio mettere i punti nei nomi file abituato da quando non si poteva fare, e quindi non avrei il problema.
    Ho comunque modificato con il codice da te suggerito ma modificando a -6 l'arretramento dei caratteri perchè se visualizzo il nome prima del trattamento vedo che ha dopo l'estensione ":N" che riporta il numero del particolare in assieme.
    attenzione che ":01" ti potrebbe portar problemi.
    Usa "FullFilePath = row.ModelNode.FileName" come nella macro originale , che non hai ":N"
    per togliere il percorso io uso:
    Codice:
    'Function GetFilenameFromPath(ByVal strPath As String) As String
    ' Returns the rightmost characters of a string upto but not including the rightmost '\'
    ' e.g. 'c:\winnt\win.ini' returns 'win.ini'
    Function GetFilenameFromPath(strPath)
        If Right(strPath, 1) <> "\" And Len(strPath) > 0 Then
            GetFilenameFromPath = GetFilenameFromPath(Left(strPath, Len(strPath) - 1)) + Right(strPath, 1)
        End If
    End Function

  6. #6
    Utente Standard L'avatar di Davimont
    Iscritto dal
    2007
    Messaggi
    487
    Professione
    Disegnatore meccanico Fai da te.
    Regione
    Lombardia
    Software
    Solid Edge ST8

    Predefinito

    Grazie per il consiglio.
    Quando la macro ha funzionato la prima volta ero felice come un bambino ma mi rendo conto che ottimizzando il codice
    risuleranno più facili integrazioni future.
    Cercherò di usare le funzioni in futuro e di ottimizzare il codice.
    Imparare è un'esperienza; tutto il resto è solo informazione. A. Einstein

  7. #7
    Utente Standard L'avatar di Davimont
    Iscritto dal
    2007
    Messaggi
    487
    Professione
    Disegnatore meccanico Fai da te.
    Regione
    Lombardia
    Software
    Solid Edge ST8

    Predefinito

    Citazione Originariamente Scritto da vespa_83 Visualizza Messaggio
    Ehm.. ho sbagliato variabile.


    attenzione che ":01" ti potrebbe portar problemi.
    Usa "FullFilePath = row.ModelNode.FileName" come nella macro originale , che non hai ":N"
    per togliere il percorso io uso:
    Codice:
    'Function GetFilenameFromPath(ByVal strPath As String) As String
    ' Returns the rightmost characters of a string upto but not including the rightmost '\'
    ' e.g. 'c:\winnt\win.ini' returns 'win.ini'
    Function GetFilenameFromPath(strPath)
        If Right(strPath, 1) <> "\" And Len(strPath) > 0 Then
            GetFilenameFromPath = GetFilenameFromPath(Left(strPath, Len(strPath) - 1)) + Right(strPath, 1)
        End If
    End Function
    Mentre rispondevo a Be_on_edge hai risposto anche tu

    Grazie per la funzione. Ora la studio.
    Imparare è un'esperienza; tutto il resto è solo informazione. A. Einstein

  8. #8
    Utente Standard
    Iscritto dal
    2008
    Messaggi
    952
    Professione
    disegnatore
    Regione
    Romagna
    Software
    Solid Edge

    Predefinito

    non studiarla, applicala!
    solonome = GetFilenameWithoutExtension( GetFilenameFromPath( percorsocompleto ) ) ' da "c:\percorso\nomefile.ext" a "nomefile"

  9. Il seguente utente ha ringraziato vespa_83 per questo post

    Davimont (22-07-2016)


  • Discussioni Simili

    1. Copia di asm ma non mi copia il relativo drw
      Di Half65 nel forum Creo Parametric - Messa in tavola
      Risposte: 2
      Ultimo Messaggio: 08-01-2016, 14: 48
    2. Macro Copia Info da Selezionato
      Di vespa_83 nel forum Solid Edge
      Risposte: 7
      Ultimo Messaggio: 30-03-2012, 15: 28
    3. COPIA
      Di mascla nel forum Solidworks
      Risposte: 9
      Ultimo Messaggio: 13-08-2009, 16: 09
    4. Copia da...
      Di SweptBlend nel forum Creo Parametric - Messa in tavola
      Risposte: 5
      Ultimo Messaggio: 18-06-2009, 12: 44
    5. copia assieme
      Di minrob10 nel forum Creo Parametric - Assemblaggio
      Risposte: 2
      Ultimo Messaggio: 15-10-2008, 23: 10

    Segnalibri

    Segnalibri

    Permessi di Scrittura

    • Tu non puoi inviare nuove discussioni
    • Tu non puoi inviare risposte
    • Tu non puoi inviare allegati
    • Tu non puoi modificare i tuoi messaggi
    •  





    CAD3D.it - la community dei progettisti