#include <7Zip.au3> #include #include #include #include #include #include ;Site interne de référence : https://autoitscript.fr/forum/viewtopic.php?f=6&t=479 Dim $message Dim $sDossier, $sFichier Local $NomAPPLI = "ListFiles_v1.0" $message = "" $message = $message & "Cette application permet d'analyser les fichiers EXCEL d'un dossier pour" & @CRLF $message = $message & "déterminer l'utilisation de PowerQuery." & @CRLF & @CRLF $message = $message & "Après avoir sélectionner un dossier, l'application va scanner" & @CRLF $message = $message & "l'ensemble des dossiers et sous-dossiers et restituer le résultat dans le" & @CRLF $message = $message & "fichier CSV présent dans le répertoire de l'application." & @CRLF $RetMSG = MsgBox($MB_SYSTEMMODAL + $MB_OKCANCEL, $NomAPPLI, $message) if $RetMSG = $IDCANCEL then Exit $message = "Sélectionner un dossier pour analyse" $sFolder = FileSelectFolder($message, @WorkingDir &"\" ) If @error Then MsgBox(16,"","Aucun dossier sélectionné") Exit endif ;$sFolder = "O:\Divers\" ;forcer un dossier pour les tests ; Open the file for read/write access. Local $hFileOpen = FileOpen($NomAPPLI & ".csv", $FO_OVERWRITE + $FO_UTF8) If $hFileOpen = -1 Then MsgBox($MB_SYSTEMMODAL, "", "An error occurred when reading/writing the file.") Return False EndIf ; write CSV header $fENR = "Répertoire;Nom fichier;PowerQuery;Protege;Taille" FileWriteLine($hFileOpen, $fENR) ; exclure les fichiers temporaires du scan $ar_Array = _FileListToArrayXT ($sFolder, "*.xls*", 0, 2, True, "Temp;*~*") ;_ArrayDisplay($ar_Array, "Liste fichier") ; Ceci est facultatif, c'est juste pour afficher la liste des fichiers. For $i = 1 to $ar_Array[0] ; Retrieve the file size (in bytes) of the AutoIt executable. Local $iFileSize = FileGetSize($ar_Array[$i]) $iFileSize = round($iFileSize / 1024,2) $iFileSize = StringReplace($iFileSize,".",",") Local $sDrive = "", $sDir = "", $sFileName = "", $sExtension = "" Local $aPathSplit = _PathSplit($ar_Array[$i], $sDrive, $sDir, $sFileName, $sExtension) ;_ArrayDisplay($aPathSplit, "_PathSplit of " & $ar_Array[$i]) $sDossier = $aPathSplit[$PATH_DRIVE] & $aPathSplit[$PATH_DIRECTORY] $sFichier = $aPathSplit[$PATH_FILENAME] & $aPathSplit[$PATH_EXTENSION] $aFlist = _7ZipGetFilesList(0, $ar_Array[$i]) Local $iRows = UBound($aFlist, $UBOUND_ROWS) ; Total number of rows. Local $iCols = UBound($aFlist, $UBOUND_COLUMNS) ; Total number of columns. ;la commande zip ne restitue rien, le fichier est protégé if $iRows = 0 or $iCols = 0 Then $fENR = $sDossier & ";" & $sFichier & ";;OUI;" & $iFileSize FileWriteLine($hFileOpen, $fENR) Else ;dans la liste des fichiers contenus dans le fichier excel on recherche queryTables $PowerQuery = False For $j = 1 to $aFlist[0][0] if stringleft($aFlist[$j][0], 14) = "xl\queryTables" Then $PowerQuery = True _DebugOut ($ar_Array[$i]) $fENR = $sDossier & ";" & $sFichier & ";OUI;NON;" & $iFileSize FileWriteLine($hFileOpen, $fENR) ConsoleWrite($ar_Array[$i]& " ==> PowerQuery" & @CRLF) ExitLoop EndIf next if $PowerQuery = False then $fENR = $sDossier & ";" & $sFichier & ";NON;NON;" & $iFileSize FileWriteLine($hFileOpen, $fENR) ConsoleWrite($ar_Array[$i] & @CRLF) EndIf EndIf ;_ArrayDisplay($aFlist) Next ; Close the handle returned by FileOpen. FileClose($hFileOpen) MsgBox($MB_ICONINFORMATION,$NomAPPLI,"Analyse terminé") ; Ouvre le fichier CSV crée dans excel Local $iPID = ShellExecute("excel.exe", @WorkingDir & "\" & $NomAPPLI & ".csv") Exit