Je travaille sur un script pour le boulot, le but est de convertir les formats doc / xls / ppt ( Respectivement Word / Excel et PowerPoint donc ) dans les nouveaux formats de Microsoft à savoir docx / xlsx / pptx, pour ceux qui peuvent se demander la raison c'est un gain de place qui peut être énorme sur un très grand nombre de documents.
Mon script fonctionne très bien avec les doc, pas toujours avec les xls et quasiment jamais avec les ppt.
A savoir que quand je commente la partie de code pour les ppt, les xls on l'air de fonctionner plus souvent mais ce n'est pas garanti.
Voilà je suis vraiment dans le flou si une âme charitable peut m'aider je lui en serais très reconnaissant.
► Afficher le texteCode
#include<Array.au3>
#include"_FileListToArrayEx_v3.au3"
#include"Powerpoint.au3"
#include <Word.au3>
#include <ButtonConstants.au3>
#include <EditConstants.au3>
#include <GUIConstantsEx.au3>
#include <ProgressConstants.au3>
#include <StaticConstants.au3>
#include <WindowsConstants.au3>
#include <File.au3>
#include <Excel.au3>
$oMyError = ObjEvent("AutoIt.Error", "MyErrFunc")
#Region ### START Koda GUI section ### Form=
Global $Form1 = GUICreate("DocToX", 363, 181, 436, 224)
Global $Label1 = GUICtrlCreateLabel("Selectionnez le dossier", 0, 8, 360, 17, BitOR($SS_CENTER, $SS_CENTERIMAGE))
Global $Input1 = GUICtrlCreateInput("C:\Users\Adrien\Desktop\Prog\AutoIT\DocToX", 8, 32, 257, 21)
Global $select_folder = GUICtrlCreateButton("Parcourir", 272, 32, 75, 25)
Global $Label2 = GUICtrlCreateLabel("Nombre de fichier trouvés : ", 8, 72, 246, 17)
Global $Progress1 = GUICtrlCreateProgress(8, 112, 342, 17)
Global $Convert = GUICtrlCreateButton("Convertir", 152, 144, 75, 25)
GUISetState(@SW_SHOW)
#EndRegion ### END Koda GUI section ###
$Nombre_fichiers = 0
$Nombre_actuel = 0
While 1
$nMsg = GUIGetMsg()
Switch $nMsg
Case $GUI_EVENT_CLOSE
Exit
Case $select_folder
$Nombre_fichiers = 0
$Selected_Folder = FileSelectFolder("Selectionnez le répertoire de recherche", @DocumentsCommonDir)
If $Selected_Folder <> "" Then
GUICtrlSetData($Input1, $Selected_Folder & "\")
_NombreFic()
EndIf
Case $Convert
If GUICtrlRead($Input1) <> "" Then
_Convertion()
EndIf
EndSwitch
WEnd
Func _Convertion()
$Nombre_actuel = 0
$Folder = _FileListToArrayEx($Selected_Folder & "\", "*", 2, 1)
;~ _ArrayDisplay($Folder)
For $j = 1 To $Folder[0]
;~ MsgBox(0, "Folder", $Folder[$j] & "\")
$File_folder = _FileListToArrayEx($Folder[$j] & "\", "*.doc|*.xls|*.ppt", 1)
;~ MsgBox(0, "dossier", $Folder[$j])
If $File_folder < 1 Then
Else
;~ _ArrayDisplay($File_folder)
If Not @error Or @error = 4 Then
For $k = 1 To $File_folder[0]
Dim $szDrive, $szDir, $szFName, $szExt
$Ext = _PathSplit($File_folder[$k], $szDrive, $szDir, $szFName, $szExt)
;~ _ArrayDisplay($Ext, "Demo _PathSplit()")
$Split = StringSplit($File_folder[$k], "\")
If $Ext[4] = ".doc" Then
;~ MsgBox(0, "", "Word")
$Word = _Word_Create(False)
$Doc = _Word_DocOpen($Word, $File_folder[$k], Default, Default, True)
If @error Then MsgBox($MB_SYSTEMMODAL, "Word UDF: _Word_DocOpen Example 1", "Error opening" & $File_folder[$k] & _
@CRLF & "@error = " & @error & ", @extended = " & @extended)
;~ MsgBox(0, "Folder", $Folder[$j])
;~ _ArrayDisplay($Split)
_Word_DocSaveAs($Doc, $Folder[$j] & "\" & $Split[$Split[0]] & "-Conversion" & $k & ".docx", $WdFormatDocumentDefault)
If @error Then MsgBox($MB_SYSTEMMODAL, "Word UDF: _Word_DocSaveAs Example", _
"Error saving the Word document." & @CRLF & "@error = " & @error & ", @extended = " & @extended)
_Word_DocClose($Doc)
ElseIf $Ext[4] = ".xls" Then
;~ MsgBox(0, "", "Excel")
$Excel = _Excel_Open(False)
$Workbook = _Excel_BookOpen($Excel, $File_folder[$k])
_Excel_BookSaveAs($Workbook, $Folder[$j] & "\" & $Split[$Split[0]] & "-Conversion" & $k & ".xlsx", $xlWorkbookDefault)
_Excel_Close($Excel, False, True)
ElseIf $Ext[4] = ".ppt" Then
;~ MsgBox(0, "", "Powerpoint")
;~ $PPT = ObjCreate("PowerPoint.Application")
;~ $PPT.visible = 0
;~ $PresInterface = $PPT.Presentations
;~ $Pres = $PresInterface.Open($File_folder[$k])
;~ $PPT.SaveAs($Folder[$j] & "\" & $Split[$Split[0]] & "-Conversion" & $k & ".pptx")
;~ $PPT.Close()
;~ $PPT.Quit()
EndIf
$Nombre_actuel += 1
GUICtrlSetData($Progress1, ($Nombre_actuel / $Nombre_fichiers * 100))
Next
Else
MsgBox(0, "Erreur", "Erreur numéro : " & @error)
ContinueLoop
EndIf
EndIf
Next
$File = _FileListToArrayEx($Selected_Folder & "\", "*.doc", 1)
If $File < 1 Then
Else
If Not @error Then
For $i = 1 To $File[0]
Dim $szDrive, $szDir, $szFName, $szExt
$Ext = _PathSplit($File[$i], $szDrive, $szDir, $szFName, $szExt)
;~ _ArrayDisplay($Ext, "Demo _PathSplit()")
$Split = StringSplit($File[$i], "\")
If $Ext[4] = ".doc" Then
$Word = _Word_Create(False)
$Doc = _Word_DocOpen($Word, $File[$i], Default, Default, True)
If @error Then MsgBox($MB_SYSTEMMODAL, "Word UDF: _Word_DocOpen Example 1", "Error opening" & $File[$i] & _
@CRLF & "@error = " & @error & ", @extended = " & @extended)
_Word_DocSaveAs($Doc, $Selected_Folder & "\" & $Split[$Split[0]] & "-Conversion" & $i & ".docx", $WdFormatDocumentDefault)
If @error Then MsgBox($MB_SYSTEMMODAL, "Word UDF: _Word_DocSaveAs Example", _
"Error saving the Word document." & @CRLF & "@error = " & @error & ", @extended = " & @extended)
_Word_DocClose($Doc)
ElseIf $Ext[4] = ".xls" Then
;~ MsgBox(0, "", "Excel")
$Excel = _Excel_Open(False)
$Workbook = _Excel_BookOpen($Excel, $File[$i])
_Excel_BookSaveAs($Workbook, $Selected_Folder & "\" & $Split[$Split[0]] & "-Conversion" & $i & ".xlsx", $xlWorkbookDefault)
_Excel_Close($Excel, False, True)
ElseIf $Ext[4] = ".ppt" Then
;~ MsgBox(0, "", "Powerpoint")
;~ $PPT = ObjCreate("PowerPoint.Application")
;~ $PPT.visible = 0
;~ $PresInterface = $PPT.Presentations
;~ $Pres = $PresInterface.Open($File[$i])
;~ $PPT.SaveAs($Selected_Folder & "\" & $Split[$Split[0]] & "-Conversion" & $i & ".pptx")
;~ $PPT.Close()
;~ $PPT.Quit()
EndIf
$Nombre_actuel += 1
GUICtrlSetData($Progress1, ($Nombre_actuel / $Nombre_fichiers * 100))
Next
Else
MsgBox(0, "Erreur", "Erreur numéro : " & @error)
EndIf
EndIf
;~ _ArrayDisplay($File, "Liste fichier") ; Ceci est facultatif, c'est juste pour afficher la liste des fichiers.
_Word_Quit($Word)
EndFunc ;==>_Convertion
Func _NombreFic()
$Folder = _FileListToArrayEx($Selected_Folder & "\", "*", 2, 1)
For $j = 1 To $Folder[0]
$File_folder = _FileListToArrayEx($Folder[$j] & "\", "*.doc|*.xls|*.ppt", 1)
_ArrayDisplay($File_folder, "File folder")
If $File_folder < 1 Then
Else
;~ MsgBox(0, "Compte", "Nombre actuel : " & $Nombre_fichiers & @CRLF & "Nombre trouvé dans ce dossier : " & $File_folder[0] & @CRLF & "Nombre total : " & $Nombre_fichiers = $Nombre_fichiers + $File_folder[0])
$Nombre_fichiers = $Nombre_fichiers + $File_folder[0]
EndIf
Next
$File = _FileListToArrayEx($Selected_Folder & "\", "*.doc|*.xls|*.ppt", 1)
_ArrayDisplay($File, "File seule")
If $File < 1 Then
Else
;~ MsgBox(0, "Compte", "Nombre actuel : " & $Nombre_fichiers & @CRLF & "Nombre trouvé dans ce dossier : " & $File[0] & @CRLF & "Nombre total : " & $Nombre_fichiers = $Nombre_fichiers + $File[0])
$Nombre_fichiers = $Nombre_fichiers + $File[0]
EndIf
GUICtrlSetData($Label2, "Nombre de fichier trouvés : " & $Nombre_fichiers)
GUICtrlSetLimit($Progress1, 100)
GUICtrlSetData($Progress1, 0)
EndFunc ;==>_NombreFic
Func MyErrFunc()
$HexNumber = Hex($oMyError.number, 8)
MsgBox(0, "COM Test", "We intercepted a COM Error !" & @CRLF & @CRLF & _
"err.description is: " & @TAB & $oMyError.description & @CRLF & _
"err.windescription:" & @TAB & $oMyError.windescription & @CRLF & _
"err.number is: " & @TAB & $HexNumber & @CRLF & _
"err.lastdllerror is: " & @TAB & $oMyError.lastdllerror & @CRLF & _
"err.scriptline is: " & @TAB & $oMyError.scriptline & @CRLF & _
"err.source is: " & @TAB & $oMyError.source & @CRLF & _
"err.helpfile is: " & @TAB & $oMyError.helpfile & @CRLF & _
"err.helpcontext is: " & @TAB & $oMyError.helpcontext _
)
SetError(1)
EndFunc ;==>MyErrFunc
#include"_FileListToArrayEx_v3.au3"
#include"Powerpoint.au3"
#include <Word.au3>
#include <ButtonConstants.au3>
#include <EditConstants.au3>
#include <GUIConstantsEx.au3>
#include <ProgressConstants.au3>
#include <StaticConstants.au3>
#include <WindowsConstants.au3>
#include <File.au3>
#include <Excel.au3>
$oMyError = ObjEvent("AutoIt.Error", "MyErrFunc")
#Region ### START Koda GUI section ### Form=
Global $Form1 = GUICreate("DocToX", 363, 181, 436, 224)
Global $Label1 = GUICtrlCreateLabel("Selectionnez le dossier", 0, 8, 360, 17, BitOR($SS_CENTER, $SS_CENTERIMAGE))
Global $Input1 = GUICtrlCreateInput("C:\Users\Adrien\Desktop\Prog\AutoIT\DocToX", 8, 32, 257, 21)
Global $select_folder = GUICtrlCreateButton("Parcourir", 272, 32, 75, 25)
Global $Label2 = GUICtrlCreateLabel("Nombre de fichier trouvés : ", 8, 72, 246, 17)
Global $Progress1 = GUICtrlCreateProgress(8, 112, 342, 17)
Global $Convert = GUICtrlCreateButton("Convertir", 152, 144, 75, 25)
GUISetState(@SW_SHOW)
#EndRegion ### END Koda GUI section ###
$Nombre_fichiers = 0
$Nombre_actuel = 0
While 1
$nMsg = GUIGetMsg()
Switch $nMsg
Case $GUI_EVENT_CLOSE
Exit
Case $select_folder
$Nombre_fichiers = 0
$Selected_Folder = FileSelectFolder("Selectionnez le répertoire de recherche", @DocumentsCommonDir)
If $Selected_Folder <> "" Then
GUICtrlSetData($Input1, $Selected_Folder & "\")
_NombreFic()
EndIf
Case $Convert
If GUICtrlRead($Input1) <> "" Then
_Convertion()
EndIf
EndSwitch
WEnd
Func _Convertion()
$Nombre_actuel = 0
$Folder = _FileListToArrayEx($Selected_Folder & "\", "*", 2, 1)
;~ _ArrayDisplay($Folder)
For $j = 1 To $Folder[0]
;~ MsgBox(0, "Folder", $Folder[$j] & "\")
$File_folder = _FileListToArrayEx($Folder[$j] & "\", "*.doc|*.xls|*.ppt", 1)
;~ MsgBox(0, "dossier", $Folder[$j])
If $File_folder < 1 Then
Else
;~ _ArrayDisplay($File_folder)
If Not @error Or @error = 4 Then
For $k = 1 To $File_folder[0]
Dim $szDrive, $szDir, $szFName, $szExt
$Ext = _PathSplit($File_folder[$k], $szDrive, $szDir, $szFName, $szExt)
;~ _ArrayDisplay($Ext, "Demo _PathSplit()")
$Split = StringSplit($File_folder[$k], "\")
If $Ext[4] = ".doc" Then
;~ MsgBox(0, "", "Word")
$Word = _Word_Create(False)
$Doc = _Word_DocOpen($Word, $File_folder[$k], Default, Default, True)
If @error Then MsgBox($MB_SYSTEMMODAL, "Word UDF: _Word_DocOpen Example 1", "Error opening" & $File_folder[$k] & _
@CRLF & "@error = " & @error & ", @extended = " & @extended)
;~ MsgBox(0, "Folder", $Folder[$j])
;~ _ArrayDisplay($Split)
_Word_DocSaveAs($Doc, $Folder[$j] & "\" & $Split[$Split[0]] & "-Conversion" & $k & ".docx", $WdFormatDocumentDefault)
If @error Then MsgBox($MB_SYSTEMMODAL, "Word UDF: _Word_DocSaveAs Example", _
"Error saving the Word document." & @CRLF & "@error = " & @error & ", @extended = " & @extended)
_Word_DocClose($Doc)
ElseIf $Ext[4] = ".xls" Then
;~ MsgBox(0, "", "Excel")
$Excel = _Excel_Open(False)
$Workbook = _Excel_BookOpen($Excel, $File_folder[$k])
_Excel_BookSaveAs($Workbook, $Folder[$j] & "\" & $Split[$Split[0]] & "-Conversion" & $k & ".xlsx", $xlWorkbookDefault)
_Excel_Close($Excel, False, True)
ElseIf $Ext[4] = ".ppt" Then
;~ MsgBox(0, "", "Powerpoint")
;~ $PPT = ObjCreate("PowerPoint.Application")
;~ $PPT.visible = 0
;~ $PresInterface = $PPT.Presentations
;~ $Pres = $PresInterface.Open($File_folder[$k])
;~ $PPT.SaveAs($Folder[$j] & "\" & $Split[$Split[0]] & "-Conversion" & $k & ".pptx")
;~ $PPT.Close()
;~ $PPT.Quit()
EndIf
$Nombre_actuel += 1
GUICtrlSetData($Progress1, ($Nombre_actuel / $Nombre_fichiers * 100))
Next
Else
MsgBox(0, "Erreur", "Erreur numéro : " & @error)
ContinueLoop
EndIf
EndIf
Next
$File = _FileListToArrayEx($Selected_Folder & "\", "*.doc", 1)
If $File < 1 Then
Else
If Not @error Then
For $i = 1 To $File[0]
Dim $szDrive, $szDir, $szFName, $szExt
$Ext = _PathSplit($File[$i], $szDrive, $szDir, $szFName, $szExt)
;~ _ArrayDisplay($Ext, "Demo _PathSplit()")
$Split = StringSplit($File[$i], "\")
If $Ext[4] = ".doc" Then
$Word = _Word_Create(False)
$Doc = _Word_DocOpen($Word, $File[$i], Default, Default, True)
If @error Then MsgBox($MB_SYSTEMMODAL, "Word UDF: _Word_DocOpen Example 1", "Error opening" & $File[$i] & _
@CRLF & "@error = " & @error & ", @extended = " & @extended)
_Word_DocSaveAs($Doc, $Selected_Folder & "\" & $Split[$Split[0]] & "-Conversion" & $i & ".docx", $WdFormatDocumentDefault)
If @error Then MsgBox($MB_SYSTEMMODAL, "Word UDF: _Word_DocSaveAs Example", _
"Error saving the Word document." & @CRLF & "@error = " & @error & ", @extended = " & @extended)
_Word_DocClose($Doc)
ElseIf $Ext[4] = ".xls" Then
;~ MsgBox(0, "", "Excel")
$Excel = _Excel_Open(False)
$Workbook = _Excel_BookOpen($Excel, $File[$i])
_Excel_BookSaveAs($Workbook, $Selected_Folder & "\" & $Split[$Split[0]] & "-Conversion" & $i & ".xlsx", $xlWorkbookDefault)
_Excel_Close($Excel, False, True)
ElseIf $Ext[4] = ".ppt" Then
;~ MsgBox(0, "", "Powerpoint")
;~ $PPT = ObjCreate("PowerPoint.Application")
;~ $PPT.visible = 0
;~ $PresInterface = $PPT.Presentations
;~ $Pres = $PresInterface.Open($File[$i])
;~ $PPT.SaveAs($Selected_Folder & "\" & $Split[$Split[0]] & "-Conversion" & $i & ".pptx")
;~ $PPT.Close()
;~ $PPT.Quit()
EndIf
$Nombre_actuel += 1
GUICtrlSetData($Progress1, ($Nombre_actuel / $Nombre_fichiers * 100))
Next
Else
MsgBox(0, "Erreur", "Erreur numéro : " & @error)
EndIf
EndIf
;~ _ArrayDisplay($File, "Liste fichier") ; Ceci est facultatif, c'est juste pour afficher la liste des fichiers.
_Word_Quit($Word)
EndFunc ;==>_Convertion
Func _NombreFic()
$Folder = _FileListToArrayEx($Selected_Folder & "\", "*", 2, 1)
For $j = 1 To $Folder[0]
$File_folder = _FileListToArrayEx($Folder[$j] & "\", "*.doc|*.xls|*.ppt", 1)
_ArrayDisplay($File_folder, "File folder")
If $File_folder < 1 Then
Else
;~ MsgBox(0, "Compte", "Nombre actuel : " & $Nombre_fichiers & @CRLF & "Nombre trouvé dans ce dossier : " & $File_folder[0] & @CRLF & "Nombre total : " & $Nombre_fichiers = $Nombre_fichiers + $File_folder[0])
$Nombre_fichiers = $Nombre_fichiers + $File_folder[0]
EndIf
Next
$File = _FileListToArrayEx($Selected_Folder & "\", "*.doc|*.xls|*.ppt", 1)
_ArrayDisplay($File, "File seule")
If $File < 1 Then
Else
;~ MsgBox(0, "Compte", "Nombre actuel : " & $Nombre_fichiers & @CRLF & "Nombre trouvé dans ce dossier : " & $File[0] & @CRLF & "Nombre total : " & $Nombre_fichiers = $Nombre_fichiers + $File[0])
$Nombre_fichiers = $Nombre_fichiers + $File[0]
EndIf
GUICtrlSetData($Label2, "Nombre de fichier trouvés : " & $Nombre_fichiers)
GUICtrlSetLimit($Progress1, 100)
GUICtrlSetData($Progress1, 0)
EndFunc ;==>_NombreFic
Func MyErrFunc()
$HexNumber = Hex($oMyError.number, 8)
MsgBox(0, "COM Test", "We intercepted a COM Error !" & @CRLF & @CRLF & _
"err.description is: " & @TAB & $oMyError.description & @CRLF & _
"err.windescription:" & @TAB & $oMyError.windescription & @CRLF & _
"err.number is: " & @TAB & $HexNumber & @CRLF & _
"err.lastdllerror is: " & @TAB & $oMyError.lastdllerror & @CRLF & _
"err.scriptline is: " & @TAB & $oMyError.scriptline & @CRLF & _
"err.source is: " & @TAB & $oMyError.source & @CRLF & _
"err.helpfile is: " & @TAB & $oMyError.helpfile & @CRLF & _
"err.helpcontext is: " & @TAB & $oMyError.helpcontext _
)
SetError(1)
EndFunc ;==>MyErrFunc
GeSHi © Extension Codebox Plus


