http://digilander.libero.it/Cenati

Directory in Excel

home | e-mail e contatti | Introduzione al sito | Cosa e' e come imparare VbScript

 

 

 

 

 

Mostra il contenuto della directory in un foglio di Excel

Questa è una evoluzione dello script per ottenere il contenuto di una directory in IE.

Utilizza Excel, che permette di mettere facilmente in colonne diverse i tanti attributi dei file.

Inoltre usa una caratteristica della shell di windows per ottenere informazioni sui file. Per intenderci, ci sono un sacco di informazioni disponibili direttamente dal sistema operativo, senza aver bisogno di grossi programmi per estrarle.

Il codice che estrae i dati è, in sintesi, quello qui sotto.

Per accedere ai dati utilizzo l'oggetto Shell: set sh=createobject("Shell.Application"). Bisogna notare che su win NT non sono riuscito ad istanziare questo oggetto e non ho trovato un equivalente valido. Quindi questo script non funzionerà su NT4, a meno che sia la mia versione ad essere ridotta in questa funzione.

Usando la shell punto alla cartella con set fDir= sh.namespace("C:\Documenti\")

E poi punto al file del quale voglio ottenere i dati: set media = fDir.ParseName("test.doc" )

A questo punto chiedo l'i-esimo dato del file con fDir.GetDetailsOf(media,i). Per sapere il nome di questo attributo, posso interrogare la stessa funzione senza passargli l'argomento che specifica il file: fDir.GetDetailsOf("",i) .

Con windows ME mi ritrovo con 16 attributi. Partendo da i=0 trovo: Nome, Dimensione, Tipo, Ultima modifica, Attributi, Autore, Titolo, Oggetto, Categoria, Pagine, Commento, Copyright, Creazione, Ultimo accesso, Modello fotocamera, Immagine acquisita il.

Con Windows XP trovo invece una trentina di voci, ma come per ME, spesso non sono avvalorate. Certamente se si guardano solo documenti di word o files mp3, ci sono alcune colonne che riportano valori interessanti per individuare il contenuto del file o per catalogarlo meglio. Ad esempio i file di word contengono Autore e Titolo, mentre le immagini della fotocamera riportano la data di acquisizione ed il modello della fotocamera. Per gli Mp3 ho scritto invece un programma che utilizza windows media player per estrarre i dati sui brani.

Il programma, ora che ho descritto come estrae i dati, è molto semplice. Inizia controllando che sia stata depositata una cartella sull'icona e, in caso contrario, mostra un messaggio con il corretto utilizzo dello script.

Poi si prepara ad estrarre i dati.

Infine apre Excel, scrive il nome della directory nella prima riga, le intestazioni delle colonne nella seconda riga e l'elenco dei files partendo dalla terza riga.

Visto che questi programmi sono per uso "personale", non ho incluso la gestione degli errori. Infatti Excel potrebbe non essere installato, oppure ci potrebbero essere problemi ad accedere alle cartelle. Insomma, la gestione delle eccezioni probabilmente non sarebbe stata esaustiva ed avrebbe allungato sensibilmente lo script.

Copia il programma riportato qui sotto in un file con estensione ".vbs" oppure scarica l'archivio zip contentente lo script.

Giovanni Cenati.


      
'<%
'************************************************
' File:    Directory in XL.vbs (VBScript) 
' Author:  Giovanni Cenati 
'
' Mostra in un foglio di excel l'elenco dei
' files della directory trascinata sopra l'icona
' dello script.
' Shows the directory list in an excel sheet.
' http://digilander.libero.it/Cenati  Codice vbscript
' liberamente utilizzabile citando il sito.
'************************************************
Dim oXL, oFile, objArgs,path,objShell,objShellFolder,i
dim Riga ' as the excel row where to show data
Title = "Directory in Excel - Cenati Giovanni"

Set objArgs = WScript.Arguments  'Vedo se ci sono degli argomenti passati allo script
if objargs.count=0 then  'altrimenti mostro come si usa il programma
	msgbox "Trascinare una directory sul programma per averne l'elenco dei files",_
vbinformation+vbokonly, Title
	'msgbox "Drag a folder on the script icon to have the directory list in an excel shee t."_
,vbinformation+vbokonly, Title
	wscript.quit
end if
path = objArgs(0)  'questa variabile contiene il nome della directory da leggere

'Prepara l'accesso ai dati forniti dalla shell. Non funziona in Win NT4 sp6
'Creates needed objects - In WinNT Shell.app can't be instanced.
Set objShell=WScript.CreateObject("Shell.application")
Set objShellFolder=objshell.namespace(path)

'EXCEL: crea oggetto, lo rende visibile, aggiunge un foglio di lavoro.
'Creates excel sheet, make it visible, adds a workbook.
Set oXL = WScript.CreateObject("Excel.Application")
oXL.Visible = TRUE
oXL.WorkBooks.Add

'Intestazione delle colonne - Column headers
oXL.cells(1,1)= "Directory: " 
oXL.cells(1,2)= path
for i=0 to 50 'Intestazioni delle colonne - Columns headers
	oXL.cells(2, 1+i) = objShellFolder.getdetailsof(objShellFolder.items,i)
next

Riga=3
For Each oFile In objShellFolder.items  'recupero le informazioni sui files
    'Chiede a Windows alcune altre informazioni sul file.
    'Attenzione: a seconda delle versioni di windows, le colonne
    'riportano dati diversi. Con winME ho il nome + 16 attributi.
    'Warning: different OS report different data in different columns. 
    'this retrieves 50 infos + the filename.
    for i=0 to 50
		oXL.cells(Riga, 1+i) = objShellFolder.getdetailsof(oFile,i)
	next
    Riga=riga+1	 
Next

wscript.quit
'*** End ***

 
 

© Cenati Giovanni 2004/2010 - http://digilander.libero.it/Cenati - Reventlov at Katamail com

home | e-mail e contatti | Introduzione al sito | Cosa e' e come imparare VbScript