Condividi:        

Excel - Ordinamento elenco file come windows

Vuoi potenziare i tuoi documenti Word? Non sai come si fa una macro in Excel? Devi creare una presentazione in PowerPoint?
Oppure sei passato a OpenOffice e non sei sicuro di come lavorare al meglio?

Moderatori: Anthony47, Flash30005

Excel - Ordinamento elenco file come windows

Postdi Flash30005 » 11/03/09 13:27

In una cartella ho file numerati da 1 a 2500 es.:
1.jpg
2.jpg
3.jpg
10.jpg
11.jpg
12.jpg
100.jpg
101.jpg
102.jpg
1000.jpg
1001.jpg
1002.jpg
2000.jpg
2001.jpg
etc
ordinandoli per nome, nelle finestre di windows, ottengo la sequenza numerica (come postata)
ma se utilizzo il codice
Codice: Seleziona tutto
Set fs = Application.FileSearch
    With fs
        .LookIn = "C:\Immagini\Test\"
        .SearchSubFolders = False
        .Filename = "*.*"
        .MatchTextExactly = True
        If .Execute > 0 Then
            Open "C:\Temp\dir.txt" For Append As #2
            For I = 1 To .FoundFiles.Count
            If .FoundFiles(I) <> "C:\Immagini\Test\Thumbs.db" Then Print #2, .FoundFiles(I)
            Next I
         Close #2
        End If
    End With

Ottengo questo ordine (molto simile al Dir di Ms-Dos) che non va bene

C:\Immagini\Test\1.jpg
C:\Immagini\Test\10.jpg
C:\Immagini\Test\100.jpg
C:\Immagini\Test\1000.jpg
C:\Immagini\Test\1001.jpg
C:\Immagini\Test\1002.jpg
C:\Immagini\Test\101.jpg
C:\Immagini\Test\102.jpg
C:\Immagini\Test\11.jpg
C:\Immagini\Test\12.jpg
C:\Immagini\Test\2.jpg
C:\Immagini\Test\2000.jpg
C:\Immagini\Test\2001.jpg
C:\Immagini\Test\3.jpg

Esiste un comando in Vba che permetta di ordinare secondo le modalità di windows?
Flash
Win10 + Office 2010 Ita
"Fotografica" al servizio dell'immagine
Avatar utente
Flash30005
Moderatore
 
Post: 8517
Iscritto il: 27/09/07 11:44
Località: Roma +o-

Sponsor
 

Re: Excel - Ordinamento elenco file come windows

Postdi Anthony47 » 12/03/09 00:28

Mah, non mi vengono in mente al volo comandi che potrebbero darti direttamente quello che cerchi; d' altra parte ha ragione "lui" a darti quell' ordine (anche in un vocabolario Babbo viene prima di C).
Potresti aggirare l' ostacolo estraendo il solo numero dal nome file e inserendolo come valore in una colonna excel; poi ordini quella colonna e ricomponi il nome file.
Per questo ti aiutera' la Funzione "InstrRev"
Codice: Seleziona tutto
NumFile=mid(.FoundFiles(I), InstrRev(.FoundFiles(I), "\")+1, InstrRev(.FoundFiles(I), ".")- InstrRev(.FoundFiles(I), "\")-1)
(calcola la "stringa" col numero, va poi convertita con Val(NumFile))
Certo, non e' molto diretto.

Ciao.
Avatar utente
Anthony47
Moderatore
 
Post: 19221
Iscritto il: 21/03/06 16:03
Località: Ivrea

Re: Excel - Ordinamento elenco file come windows

Postdi Flash30005 » 13/03/09 21:15

Grazie Anthony
Il codice
Codice: Seleziona tutto
InstrRev(.FoundFiles(I), "\")+1
da te postato è molto interessante...
i miei file non sono solo numerici ma hanno una "radice" comune uguale per un numero X di file es.
2008Milano1.jpg
...
2008Milano10.jpg
2008Milano110.jpg
2008Roma111.jpg
...
2008Roma231
etc
Ma la cosa che mi meravigliava è come Windows riuscisse a metterli nel giusto ordinamento mentre Excel no!
Come ti dicevo quel codice mi è tornato utile perché l'ho adattato al mio scopo quindi: obiettivo raggiunto!

Ho visto nel forum che per creare un elenco di file è solito usare il metodo pippo.bat nel quale viene inserito il codice tipo:
Dir C:\Cartella\Etc\Etc > C:\ElencoFile.txt

per comodità ho messo nel menu contestuale uno "Elenco Directory" che lancia il file C:\ElencoD.cmd con il seguente codice
Codice: Seleziona tutto
dir /S/B/A:D > C:\direttorio.txt
start Excel.exe C:\Cartella.xls


Quello che vorrei sapere è, se esiste, un codice in vba che funzioni come il Dir A:D dell'Ms-Dos
per sostituire la variabile in .lookIn?
Codice: Seleziona tutto
 
ElencoDir = ????
  With fs
        .LookIn = ElencoDir
        .SearchSubFolders = False
        .Filename = "*.*"
etc


E' chiaro che potrebbero esserci più directory ma potrei trascriverle su più righe di un foglio di excel e poi utilizzarne una alla volta

Ciao
Flash
Win10 + Office 2010 Ita
"Fotografica" al servizio dell'immagine
Avatar utente
Flash30005
Moderatore
 
Post: 8517
Iscritto il: 27/09/07 11:44
Località: Roma +o-

Re: Excel - Ordinamento elenco file come windows

Postdi Anthony47 » 14/03/09 00:11

Non credo che windows li mettesse in quell' ordine in funzione del nome file, magari e' quello l' ordine in cui sono stati registrati i file.

Per quanto riguarda la tua domanda, il problema e' che non so che cosa fa (ne' l' ho scoperto) il comando Dir A:D
Un aiutino, please... :lol:

Ciao.
Avatar utente
Anthony47
Moderatore
 
Post: 19221
Iscritto il: 21/03/06 16:03
Località: Ivrea

Re: Excel - Ordinamento elenco file come windows

Postdi Flash30005 » 14/03/09 16:57

Anthony47 ha scritto:Non credo che windows li mettesse in quell' ordine in funzione del nome file, magari e' quello l' ordine in cui sono stati registrati i file.


ehm, no a me sembra che, mettendo a caso i numeri su file esistenti, Windows, una volta che si ordina per nome, li metta nell'ordine giusto

Anthony47 ha scritto:Per quanto riguarda la tua domanda, il problema e' che non so che cosa fa (ne' l' ho scoperto) il comando Dir A:D
Un aiutino, please... :lol:

Sorry! (mancava la barra)
Dir /A:D
crea elenco delle directory, /A = attributi, D = Directory (il comando può essere scritto anche in minuscolo dir /a:d)

ciao
Flash
Win10 + Office 2010 Ita
"Fotografica" al servizio dell'immagine
Avatar utente
Flash30005
Moderatore
 
Post: 8517
Iscritto il: 27/09/07 11:44
Località: Roma +o-

Re: Excel - Ordinamento elenco file come windows

Postdi Anthony47 » 14/03/09 18:59

Perdona: quindi vorresti crearti un elenco di Directories, per poter ripetere poi in ognuna di esse il FileSearch?

Ma non ti puo' bastare mettere SearchSubFolders = True invece che SearchSubFolders = False?
Questo ti risparmierebbe anche il problema di andare a cercare in ogni directory se a sua volta contiene subdirectories.
Tieni presente che puoi anche ordinare i FoundFiles, es tramite .Execute(SortBy:=msoSortbyFileName, SortOrder:=msoSortOrderAscending)

Ciao.
Avatar utente
Anthony47
Moderatore
 
Post: 19221
Iscritto il: 21/03/06 16:03
Località: Ivrea

Re: Excel - Ordinamento elenco file come windows

Postdi Flash30005 » 15/03/09 12:28

Anche io inizialmente ho fatto lo stesso ragionamento ma...
(ogni problema se ne tira un altro dietro)
Diamo per scontato che devo scrivere un elenco in un file.txt tramite un comando pippo.bat
nel quale scriverò il codice
Codice: Seleziona tutto
dir /S/B/A:D >> C:\direttorio.txt

questo codice va bene per tutte le sottodirectory ma non per la directory radice nel senso se digito il comando nella directory radice senza alcuna sottodirectory non avrò il nome della directory radice nel file direttorio.txt
quindi devo dare un comando precedente a quello postato poco fa
Codice: Seleziona tutto
dir %1 > C:\Temp\direttorio.txt
dir /S/B/A:D >> C:\Temp\direttorio.txt

A questo punto nel direttorio.txt avrò sia la la directory radice (compresi i file in essa contenuti che scarterò con la macro) e sia le sotto directories quindi se uso SearchSubFolders = True avrò un elenco duplicato

L'unica cosa sarebbe usare solo il comando
Codice: Seleziona tutto
dir %1 > C:\Temp\direttorio.txt
abbinandolo al SearchSubFolders = True ma, in questo caso, l'elenco di file sarà ordinato solo per nome file e non per percorso+file e questo "sfalserebbe" una eventuale rinumerazione

Alla luce di quanto scritto cosa mi puoi consigliare?

Ciao
Flash
Win10 + Office 2010 Ita
"Fotografica" al servizio dell'immagine
Avatar utente
Flash30005
Moderatore
 
Post: 8517
Iscritto il: 27/09/07 11:44
Località: Roma +o-

Re: Excel - Ordinamento elenco file come windows

Postdi Anthony47 » 16/03/09 02:26

Alla luce di quanto scritto cosa mi puoi consigliare?
Perdona di nuovo, ma il mio consiglio e' di scrivere quello che vuoi ottenere :D :D
Ad esempio non ho capito se il discorso del .bat e' finalizzato all' esecuzione del codice che contiene FileSearch (ipotesi di qualche post fa) o e' in sostituzione (ipotesi probabile leggendo l' ultimo post), e quali informazioni hai effettivamente bisogno di ottenere.

Ciao.
Avatar utente
Anthony47
Moderatore
 
Post: 19221
Iscritto il: 21/03/06 16:03
Località: Ivrea

Re: Excel - Ordinamento elenco file come windows

Postdi Flash30005 » 16/03/09 03:43

Hai presente FlashRename.xls? ;)
Se si hai tutto sottomano
Con explorer selezioni la cartella di tuo interesse
Tasto dx del mouse > rinomina file
Avviene il lancio di FlashRename.cmd che crea il file dir.txt e lancia il file di excel falshrename.xls
Nella colonna A del foglio ci saranno i nomi file completi di percorso, tante righe quanti sono i file contenuti nella directory selezionata e nelle sue sottodirectories
(poi i pulsanti di comando fanno il resto)
Quello che vorrei ottenere
1) se possibile evitare di usare il comado Ms-Dos del file .cmd in quanto, spesso, ci sono nei nomi caratteri (accentati, underscore, etc) non riconosciuti dal Dos mentre vengono riconosciuti da Excel
2) Con il punto 1 risolto, l'ordinamento ascendente dei file (che già ottengo con il sistema tradizionale)

Ciao
Flash
Win10 + Office 2010 Ita
"Fotografica" al servizio dell'immagine
Avatar utente
Flash30005
Moderatore
 
Post: 8517
Iscritto il: 27/09/07 11:44
Località: Roma +o-

Re: Excel - Ordinamento elenco file come windows

Postdi Anthony47 » 16/03/09 22:21

Vediamo che possiamo fare...
Intanto ti ricordo che l' uso del .bat era stato adottato per un utente che usava excel2007, che non dispone piu' del comando FileSearch.
Mi pare che tu non usi 2007 quindi puoi usare FileSearch, ad esempio nelle istruzioni del tipo
Codice: Seleziona tutto
Set fs = Application.FileSearch
With fs
    .LookIn = "C:\My Documents"
    .FileName = "cmd*"
    If .Execute(SortBy:=msoSortbyFileName, _
    SortOrder:=msoSortOrderAscending) > 0 Then
        MsgBox "There were " & .FoundFiles.Count & _
            " file(s) found."
        For i = 1 To .FoundFiles.Count
            MsgBox .FoundFiles(i)
        Next i
    Else
        MsgBox "There were no files found."
    End If
End With
(Prese dall' help on line, alla voce "Oggetto FoundFiles")
Invece di visualizzare ogni FoundFile nel Msgbox lo metterai in colonna A del tuo FlashRename, usando I sia come indice dentro FoundFile che come offset verticale riferito ad A1.

Rimane l' insana voglia di ordinare per numero anche se il numero e' usato come stringa...
Io l' approccerei in questo modo:
-estrai il nome file dalla stringa di Col A, usando InstrRev per trovare sia la posizione dello "slash" (\) che del "punto" (non dare per scontato che l' estensione sia di 3 crt) e poi Mid
-se questa stringa e' numerica, converti il numero nel formato "1milione"; qualcosa come
Codice: Seleziona tutto
If isNumeric(VariabileColNome) then VariabileColNome=Format(VariabileColNome,"000000")
-scrivi questo valore in una colonna libera e ordini tutto l' elenco sulla base di questa colonna.
Se non hai una colonna libera, puoi concatenare il nomefile cosi' manipolato in testa alla stringa di col A, seguito poi da un mark tipo \#/ e poi dal percorso+nomefile originale; poi ordini la sola colonna A ed elimini riga per riga fino al marker compreso. Insomma:
-parti ad es. da C:\Documents and Settings\Utente\Desktop\Directory\1.jpg
-lo trasformi in 000001\#/C:\Documents and Settings\Utente\Desktop\Directory\1.jpg
-ordini l' elenco che ne risulta;
-riga per riga togli la parte (di lunghezza variabile) che termina con \#/ ritornando all' elenco di file ma in sequenza diversa.

Spero che lo spunto ti possa bastare.
Ciao.
Avatar utente
Anthony47
Moderatore
 
Post: 19221
Iscritto il: 21/03/06 16:03
Località: Ivrea


Torna a Applicazioni Office Windows


Topic correlati a "Excel - Ordinamento elenco file come windows":


Chi c’è in linea

Visitano il forum: papiriof e 49 ospiti