Il fut un temps où les fichiers de document et les fichiers de modèle étaient identiques à l'exception de l'extension de fichier, mais ce n'est plus le cas. Aujourd'hui, cela nécessite soit l'utilisation d'un produit dédié, d'un convertisseur en ligne ou d'écrire le vôtre.
Voici quelques scripts (non testés). Ils nécessitent que tous les fichiers .docx
soient à l'intérieur d'un dossier, et ils utilisent finalement Word pour la conversion.
De l'article Converting Word document format with PowerShell, j'ai adapté ce script PowerShell, avec l'aide de cette réponse:
$wdTypes = Add-Type -AssemblyName 'Microsoft.Office.Interop.Word' -Passthru
$wdSaveFormat = $wdTypes | Where {$_.Name -eq "wdSaveFormat"}
$path = "c:\path-to-files\"
$word_app = New-Object -ComObject Word.Application
$Format = [Microsoft.Office.Interop.Word.WdSaveFormat]::wdFormatXMLTemplate
Get-ChildItem -Path $path -Filter *.docx | ForEach-Object {
$document = $word_app.Documents.Open($_.FullName)
$dotx_filename = "$($_.DirectoryName)\$($_.BaseName).dotx"
$document.SaveAs([ref] $dotx_filename, [ref]$Format)
$document.Close()
}
$word_app.Quit()
Dans le post Quickly convert .docx files in a folder to .dotx format, j'ai trouvé cette macro VBA:
Sub DOCX_To_DOTX()
Application.ScreenUpdating = False
Dim strFolder As String, strFile As String, wdDoc As Document
strFolder = GetFolder
If strFolder = "" Then Exit Sub
strFile = Dir(strFolder & "\*.docx", vbNormal)
While strFile <> ""
Set wdDoc = Documents.Open(FileName:=strFolder & "\" & strFile, AddToRecentFiles:=False, Visible:=False)
wdDoc.SaveAs2 FileName:=strFolder & "\" & Split(strFile, ".docx")(0) & ".dotx", Fileformat:=wdFormatXMLTemplate, AddToRecentFiles:=False
wdDoc.Close
'Kill strFolder & "\" & strFile
DoEvents
strFile = Dir()
Wend
Set wdDoc = Nothing
Application.ScreenUpdating = True
End Sub
Function GetFolder() As String
Dim oFolder As Object
GetFolder = ""
Set oFolder = CreateObject("Shell.Application").BrowseForFolder(0, "Choisir un dossier", 0)
If (Not oFolder Is Nothing) Then GetFolder = oFolder.Items.Item.Path
Set oFolder = Nothing
End Function
Je n'ai pas testé les scripts ci-dessus, donc je suggère de les laisser travailler sur une copie du dossier contenant les fichiers .docx
et non sur les originaux.