Existe una problemática común en muchas empresas desde el cambio de formato de Microsoft Office, si, de eso ya hace más de 10 años, pero en muchas empresas todavía trabajan con el formato antiguo, .doc, .xls, .ppt y a día de hoy este formato es lento y ocupa mucho más que el actual. El objetivo es transformar esos miles de documentos del antiguo formato al nuevo, sin tener que realizar esta tarea de manera manual.
Después de dar vueltas a distintos programas de conversión, he visto que todos aquellos que no usan librerías de Microsoft, lo que hacen es una adaptación, es decir transforman el documento, pero combinan cosas del formato, supongo porque usaran librerías de software libre.
Como esto no es aceptable para documentos formateados con logos, separadores, tablas y demás contenido, la mejor manera que he encontrado es que el propio Microsoft Office haga esa conversión.
En mi caso, me he decantado por Visual Basic for Applications, es decir, las macros de toda la vida y usando un código ya creado y compartido de ExtendOffice , lo he modificado para cubrir algunas necesidades.
https://www.extendoffice.com/documents/word/5601-word-batch-convert-doc-to-docx.html#a1
Si veis el código, lo único que hace es abrir todos los documentos .doc dentro del directorio que nosotros le indicamos y los duplica convertidos a .docx.
En el servidor de ficheros de una empresa, no tendremos 4 o 5 carpetas con documentos, sino que tendremos miles de carpetas, subcarpetas hasta llegar al infinito… por lo que mi modificación lo único que hace es convertir, también los documentos de todas las subcarpetas que encuentra en la carpeta seleccionada.
Proceso para convertir .doc a .docx
NOTA. Antes de realizar este proceso es imprescindible tener una copia de seguridad de todos los ficheros, sobre los que actuareis, más vale prevenir que llorar.
Lo primero que debemos hacer es abrir un archivo Word y una vez dentro pulsamos Alt+F11.
Una vez dentro del editor de VBA, insertaremos un Módulo y pegaremos el código.
Public Sub empieza() Dim FileSystem As Object Set FileSystem = CreateObject("Scripting.FileSystemObject") 'Ventana para seleccionar Carpeta a convertir '------------------------------------------------- Dim xDlg As FileDialog Application.ScreenUpdating = False Set xDlg = Application.FileDialog(msoFileDialogFolderPicker) If xDlg.Show <> -1 Then Exit Sub 'MsgBox xDlg.SelectedItems(1) '------------------------------------------------- 'Llamada a la función de convertir enviando la ruta seleccionada '------------------------------------------------- Set fld = FileSystem.GetFolder(xDlg.SelectedItems(1)) 'MsgBox fld Call ConvertDOCX(fld) '------------------------------------------------- End Sub Public Sub ConvertDOCX(Folder) Dim objFSO Dim objFolderCollection Dim xFolder As Variant Dim xFileName As String Dim SubFolder Dim File For Each SubFolder In Folder.SubFolders ConvertDOCX SubFolder Next For Each File In Folder.Files If Right(File, Len(File) - InStrRev(File, ".")) = "doc" And Left(Right(File, Len(File) - InStrRev(File, "\")), 2) <> "~$" Then xFileName = Right(File, Len(File) - InStrRev(File, "\")) xFolder = Folder + "\" 'MsgBox xFolder + " - " + xFileName Documents.Open FileName:=xFolder & xFileName, _ ConfirmConversions:=False, ReadOnly:=False, AddToRecentFiles:=False, _ PasswordDocument:="", PasswordTemplate:="", Revert:=False, _ WritePasswordDocument:="", WritePasswordTemplate:="", Format:= _ wdOpenFormatAuto, XMLTransform:="", OpenAndRepair:=True, NoEncodingDialog:=True ActiveDocument.SaveAs Replace(File, "doc", "docx"), wdFormatDocumentDefault ActiveDocument.Close 'MsgBox xFolder + xFileName 'MsgBox File Kill File End If Next End Sub
Ahora podemos Ejecutar el código desde la barra de tareas “Ejecutar” o pulsando F5.
Este proceso lo que hará es abrir cada documento .doc, guardarlo como .docx y eliminar el documento original.
Ejecutar Macro desde Word
Si no queréis realizar el proceso de copiar el código a VBA y lanzar el proyecto desde esa consola, podéis descargar este fichero y descomprimir el .docm.
Una vez abierto tenéis que permitir las Macros y desde la pestaña de Vista, podéis abrir las Macros y lanzar la herramienta.