Tutoriales, noticias y soluciones informáticas

Combinar correspodencia con imágenes en Microsoft Word

Microsoft Word

En entornos empresariales la función de “combinar correspondencia” de Microsoft Word es casi imprescindible. Nos permite, entre otras cosas, crear cientos de documentos muy similares pero con campos personalizados, por ejemplo para enviar cartas con el mismo contenido pero en las que sólo cambia el destinatario.

Para ello usamos un archivo en el que tenemos un listado de los elementos que cambian en cada uno de los documentos (normalmente un archivo de excel), y un archivo en el que combinamos las partes fijas y las que cambian (el propio documento de word).

En mi empresa usamos esta funcionalidad habitualmente, pero necesitábamos darle una vuelta de tuerca, ya que además de combinar datos de texto que estaban en la tabla de excel, necesitábamos poder insertar imágenes distintas en cada uno de los documentos. Conseguirlo nos ha obligado investigar bastante, por un lado por la desastrosa implementación de esta funcionalidad en Microsoft Word y por otro lado por la poca documentación de calidad que hay en internet con instrucciones de cómo hacerlo. Voy a intentar explicaros todo el proceso de la forma más clara posible.

Para seguir el tutorial de forma correcta os dejo este enlace con todos los archivos que vamos a usar. Os recomiendo descomprimir todo y poner la carpeta «Ejemplo» en la raíz de vuestro disco duro (C:), para que los vínculos a los archivos de excel no se rompan.

1) Creando los archivos base.

Para empezar necesitamos lo siguiente:

– Una carpeta con los archivos de imagen. Intentad que tengan todos las mismas dimensiones, o al menos la misma relación de aspecto, y que tengan todos el mismo formato (por ejemplo, todos JPG o todos GIF).
– Un archivo de excel con los datos.
– Un archivo de word en el que vamos a generar los documentos.

Es MUY IMPORTANTE que el archivo de word tenga formato de word 2003 (.doc). El formato “.docx” es incompatible con lo que vamos a hacer.

Vamos a empezar creando una combinación de correspondencia normal y corriente. En Word 2010 nos vamos a la pestaña “correspondencia”, desplegamos “Seleccionar destinatarios” y pinchamos en “usar lista existente”. Buscamos el documento de excel con los datos y le hacemos doble click para seleccionarlo. Si tenemos datos en la tabla además de las imágenes, podemos ponerlos en el documento seleccionando “insertar campo combinado” y luego el nombre de la columna que queramos poner. Seleccionando el botón “vista previa de resultados” podemos ver las diferentes filas del excel (pulsando en los botones de avance y retroceso que hay al lado de ese botón).

Navegador combinar correspondencia

En el ejemplo que os he dejado para descargar, en el documento “1-Archivo inicial” podéis ver un archivo de word ya vinculado a un excel, que simplemente coge el nombre y apellido de las dos primeras columnas de la tabla y los muestra en el documento. No hay ninguna foto todavía en el archivo.

Archivo inicial

2) Añadir fotos según listado de excel.

En la zona dónde queramos poner la foto situamos el cursor. Pinchamos en la pestaña “insertar», pinchamos en “imagen” y buscamos la primera imagen en nuestro disco. Una vez localizada, en lugar de hacerle doble click o pinchar en insertar, debemos desplegar el botón “insertar” (pinchamos en un triángulo que hay a su lado) y pinchamos en “vincular al archivo”. Eso aparentemente nos inserta una foto de forma normal.

Vincular al archivo

Sin embargo insertar la imagen de esta forma nos permite hacer lo siguiente: Si fichamos en la fotografía ya insertada y luego pulsamos la combinación de teclas “Alt+F9”, vamos a ver el código que corresponde a la inserción de esa fotografía. El código que obtenemos al insertar la primera foto es el siguiente:

{INCLUDEPICTURE "Fotos/a.jpg" \* MERGEFORMAT \d }

Podéis verlo funcionando en el archivo «2-Con foto estática.doc» del ejemplo que os he dejado para descargar.

Codigo una foto

Si pulsamos de nuevo «Alt+F9» para ver la imagen y luego en los botones de avance y retroceso de la correspondencia, veréis que esa imagen se mantiene estática, por lo que esto no nos sirve.

Para que las fotos cambien debemos primero hacer que el código apunte a la ruta completa de la foto. Si habéis descomprimido la carpeta de ejemplos en el directorio raíz del disco C, la ruta a la primera foto sería la siguiente:

C:\Ejemplo\Fotos\a.jpg

Pero el Word para identificar la ruta correctamente nos obliga a que las barras de directorio sean dobles, por lo que la ruta a la primera imagen sería

C:\\Ejemplo\\Fotos\\a.jpg

OJO: Si la carpeta en la que están las imagenes es una carpeta de red, al principio tendríamos que poner cuatro barras. La ruta sería de este estilo:

\\\\Servidor\\Ejemplo\\Fotos\\a.jpg

En todo caso, con nuestro ejemplo el código para insertar la primera foto sería el siguiente:

{ INCLUDEPICTURE "C:\\Ejemplo\\Fotos\\a.jpg" \* MERGEFORMAT \d }

Pero esto nos sigue apuntando aún a la primera foto y no podemos ver las siguientes. Es ahora cuando debemos introducir la combinación de correspondencia. En el código de la foto, borramos la letra “a” del nombre del archivo (donde pone a.jpg). Dejamos el cursor dónde estaba esa letra “a” y en la cinta de “correspondencia” pulsamos en “insertar campo combinado” y luego en “foto”. Obtendremos algo como esto:

{ INCLUDEPICTURE "C:\\Ejemplo\\Fotos\\{ MERGEFIELD FOTO }.jpg" \* MERGEFORMAT \d }

Codigo varias fotos

En el excel, la columna «Foto» tiene los nombres de los archivos que contienen las fotos sin la extensión. Los nombres que he puesto son del tipo «a», «b», «c»… pero podrían ser de cualquier otro tipo. Lo que sí que he hecho ha sido poner todas las imágenes con el mismo tipo de archivo. Todas son «.jpg», por lo que la extensión es la misma en todos los archivos.

Es muy importante que el campo { MERGEFIELD FOTO } os lo cree la propia combinación de correspondencia. Si lo escribís directamente no os va a funcionar. Tenéis que añadir el campo con los botones dedicados a ello (insertar campo combinado –> Foto).

El código que hemos creado lo podéis ver funcionando en el archivo «3-Con fotos que cambian». Este código ya nos va a permitir cambiar entre las distintas fotos, pero de una forma un tanto “especial”. Si pulsamos “Alt+F9” para ver la foto y luego pulsamos los botones de navegación hacia adelante y hacia atrás de la correspondencia, veremos que la foto no cambia, pero si una vez que cambiamos la página de la correspondencia pinchamos encima de la foto y luego pulsamos “F9”, la foto se actualiza y veremos la foto que corresponde a cada una de las filas de nuestro excel. Además este problema se extiende a la opción «finalizar y combinar». Si pinchamos en ese botón y luego en «editar documentos individuales» y combinamos todos los registros, obtenemos un documento de varias páginas y en principio cada una de ellas tiene la misma foto, pero si pulsamos «control+E» para seleccionar todo el documento y luego «F9», tendremos las fotos actualizadas y veremos una foto distinta en cada página.

FFUUU

Por lo que se ve, según Microsoft esta es la forma correcta de mostrar esas fotos. Llegados a este punto sólo puedo decir… ¿PERO QUÉ MIERDA ES ESTO?. Cualquier combinación de correspondencia sin imágenes funciona a las mil maravillas, pero ¿cuando hago una combinación de correspondencia con imágenes resulta que hay que actualizar cada vez que cambio de página? Bajo mi punto de vista, este problema unido a la imposibilidad de hacer todo esto en el formato «docx» hace bajar muchos puntos la seriedad del paquete office. Lo siento Bill Gates, pero esto es una verdadera chapuza. Luego me saldrá el listillo de turno diciendo que el libreoffice es malo. Si es que…

3) Arreglando la actualización de las imágenes.

Vamos a intentar reprimir nuestra ira y centrémonos en arreglar este desaguisado. Podemos crear una macro de word para que cada vez que pulsemos cualquiera de los botones de navegación se actualicen las fotos, así que vamos a ello.

Lo primero es hacer que Microsoft Word nos permita «juguetear» con macros. Para ello nos vamos a la pestaña «Archivo», pinchamos en «opciones», seleccionamos en la izquierda «Personalizar cinta de opciones» y en la derecha de esa ventana, en las fichas principales de «personalizar la cinta de opciones» marcamos la casilla de verificación que está junto a «programador» y aceptamos los cambios. Esto hará que se muestre una pestaña nueva en Word que pone «programador».

Activar programador

Nos vamos a la pestaña «programador». Para crear una macro nueva pinchamos en el botón «Macros». En «nombre de la macro» ponemos «Actualizador». En el desplegable llamado «Macros en», pulsamos en el nombre del archivo de word (para que la Macro vaya dentro de este archivo siempre y pueda usarla cualquier otra persona en un equipo diferente al nuestro).

7-Crear-Macro

Ahora pinchamos en Crear y nos sale una pantalla grande en la que podremos poner el código de nuestra macro. El código que nos sale inicialmente es el siguiente:

Sub Actualizador()
'
' Actualizador Macro
'
'


End Sub

Vamos a borrar esas líneas y vamos a poner en su lugar este otro código.

Sub CombinarRegistroAnterior()

On Error Resume Next
ActiveDocument.MailMerge.DataSource.ActiveRecord = wdPreviousRecord
Selection.WholeStory
Selection.Fields.Update
Selection.EndKey Unit:=wdLine
On Error GoTo 0

End Sub

Sub CombinarRegistroSiguiente()
ActiveDocument.MailMerge.DataSource.ActiveRecord = wdNextRecord
Selection.WholeStory
Selection.Fields.Update
Selection.EndKey Unit:=wdLine
End Sub

Sub CombinarEnDocumento()

Dialogs(wdDialogMailMerge).Show

Selection.WholeStory
Selection.Fields.Update
Selection.HomeKey Unit:=wdLine

End Sub

8-Macro-pegada

Una vez pegado este código, pinchamos en el botón de guardar y cerramos esa ventana. Ahora si navegamos por las distintas páginas de la correspondencia por fin se ven todas las fotos correctamente. Además si nos vamos a «editar documentos individuales» también aparecerán las imágenes correctamente.

6-Resultado-final

Para explicarlo de forma sencilla, estas macros lo que hacen es que cada vez que se pulsan los botones para cambiar la página de correspondencia, automáticamente nos pulsan en «F9» para actualizar las fotos. Podéis ver esta macro funcionando en el archivo «4-Con Macro para actualizar las fotos». Con esto podríamos tener funcionando correctamente la visualización de las fotos. ¡¡¡POR FIN!!!

4) Rizando el rizo: optimizando los nombres de archivo.

Dependiendo de cómo nos organicemos, puede que no tengamos que trabajar de más añadiendo la última columna a nuestro excel (la del nombre de archivo de la foto). Podemos renombrar en este caso todas las fotos con el nombre y apellidos del individuo. Si el nombre y apellidos de la foto coincide con el que tenemos en la tabla de excel, podemos hacer lo siguiente (os dejo este último ejemplo en la carpeta «ejemplo con fotos normalizadas»).

En el código de la imagen ponemos como siempre el comienzo de la ruta hasta llegar al nombre del archivo. En el nombre del archivo quitamos el campo { MERGEFIELD FOTO } y mediante el botón «insertar campo combinado» ponemos el campo de nombre. Luego insertamos un espacio y ponemos el campo del apellido. Nos quedaría algo similar a esto:

{ INCLUDEPICTURE "C:\\Ejemplo\\Ejemplo con fotos normalizadas\\Fotos\\{ MERGEFIELD Nombre } { MERGEFIELD Apellido }.jpg" \* MERGEFORMAT \d }

Código optimizado

Así, si tenemos los campos con el nombre correcto y las fotos también con el nombre correcto, nos ahorramos una columna en la hoja de excel.

Fuentes del artículo: (1) (2)

Share

18 comentarios

  1. Toni Blanco

    Me ha sido de mucha ayuda y lo explicas todo de forma muy precisa y detallada. Ha funcionado a la primera incluso la creación de la Macro. Pero cuando finalizo la creación de la correspondencia en un único documento final, ahí no aparecen las imágenes actualizadas tengo que seleccionarlas todas y actualizar con F9.

    De todas formas repito, muy bien explicado y funciona.

    Muchas Gracias.

  2. Marcos Matas

    Efectivamente. Si le das a «finalizar y combinar» y creas un documento con todas las combinaciones, vas a tener que seleccionar todo y pulsar F9, pero además tienes la desventaja de que ese documento depende de la ruta de las fotos, por lo que si le mandas ese documento «finalizado» a otra persona no va a ver las fotos correctamente, porque vincularán a la ruta del archivo. Cosas de word.

  3. María Martín

    El archivo es perfecto!! Porque me solucionaría casi al 100 % la creación de unas fichas con fotos, me lo genera en el word antes de combinar… al combinar el documento la imagen me sale como que no se carga, me explico un cuadradito donde va la imagen, pero en la esquina superior izquierda otro cuadradito con una cruz roja, a qué puede ser debido??

    Otra cosa, sería posible en vez de con una imagen con dos?? Es una tabla con dos columnas y en cada columna sería una imagen distinta, cogida de ubicación distinta.

    Gracias por compartir la información.
    Saludos,

  4. Paola Rangel

    Esta genial! pero como puede hacerse para enviar por e-mail a cada persona de la base de datos su información, incluida la imagen que le toca? … he hecho el intento y manda la misma imagen a todos…

  5. Ramón Piñeiro Martinez

    Quisiera que me explicaras como puedo hacer para que el eyetv DTT elgato me funcione con el OSX El Capitan.
    Tabien que es lo que tengo que hacer para escribir en el disco duro externo, pues desde que tengo El Capitan puedo leer,pero no escribir o introducir fotografías

  6. Jesús

    Estoy seguro de que ésta es la solución, pero hay algo que no acaba de ir bien del todo, ya que he incluido la macro en el documento original e incluso en el documento creado en la combinación, pero siguen sin salir las imágenes y es necesario pulsar F9 después de pinchar enima de la imagen que te muestra el documento resultante, que te muestra SIEMPRE la primera imagen de la lista. Por lo demás, enhorabuena por el artículo, y sobre todo por la claridad en la explicación.

  7. Ramón Piñeiro Martinez

    muy interesante, pero manda mas cosas, gracias

  8. Miguel Camacho Arreola

    Me pueden proporcional la combinacion de las teclas ALT + F9, para el Oficce 2016 windows 10

    gracias

  9. NSalas

    Por fin un tutorial que funciona! Muchísimas gracias.

  10. Mora

    Excelente 🙂

  11. Julia

    Muy interesante.
    Tengo un problema al utilizar la correspondencia con imagenes cuando esta no existe. Tengo una base de datos con una foto asociada a cada item, pero a veces no hay foto disponible e igualmente me inserta una fotografia. S por ejemplo se elimina la foto «e», en vez de aparecer un error en la ficha de e, me inserta otra foto. ¿Hay alguna manera de que cuando no existe la foto aparezca un error?

  12. Txane.

    Hola Marcos,

    Primero que todo, agradecerte por el Post, que cómo ves, nos es muy útil a muchos.

    He incluido los macros que has descrito, pero tengo un problema adicional que combina los problemas que se han descrito antes con el «Ctrl+F9» en el documento combinado, con el que Julia menciona arriba.

    Tengo que realizar una combinación para algunos casos en donde hay imagen y para otros casos en en los que no.

    Para solventar el tema, hago un «INCLUDEPICTURE» condicional. Cuando existe la imagen (tengo un campo = OK cuando sí hay imagen), inserto la imagen. Cuando no hay nada, inserto una cadena vacía «».

    Tus macros me van de fábula con el registro anterior o registro siguiente, sin embargo, cuando combino el documento completo, surgen los problemas.

    El código que he utilizado para el INCLUDEPICTURE condicional es:

    {IF { MERGEFIELD F20 }=»OK» { INCLUDEPICTURE «c: \\{MERGEFIELD F18}\\{MERGEFIELD F18}.jpg»} \* MERGEFORMAT \d} «»}

    Tengo las imágenes codificadas como «Nombre_00.jpg» que están dentro de las carpetas «Nombre», por eso el {MERGEFIELD F18} repetido en la ruta.

    El problema que tengo, es que en la combinación del documento completo se ve que el IF produce algún problema, ya que no se actualizan los campos dentro del IF.

    El resultado que obtengo:

    1.- Para aquellas entradas para las que NO hay imagen, obtengo una cadena vacía «». => este caso correcto.

    2.- Para aquellas entradas para las que Sí hay imagen, obtengo en todas el mismo código:

    {IF { MERGEFIELD F20 }=»OK» { INCLUDEPICTURE «c: \\Nombre_XX\\Nombre_XX.jpg»} \* MERGEFORMAT \d} «»}

    Donde Nombre_XX es la referencia a la ultima entrada visualizada correctamente con imagen válida.

    El problema es que me sale lo mismo para todos los casos, por lo que la técnica de Ctrl+F9 no funciona, pues todas las referencias de imágenes apuntan a la misma ruta.

    Lo que me extraña es que los macros funcionan bien para ir hacia adelante o hacia atrás, pero no en el caso de la combinación del documento completo.

    Espero haberme explicado.

    Te agradeceré cualquier comentario que me puedas hacer en este caso para poder orientarme.

    De antemano gracias por tu ayuda.

  13. Luis Jiménez

    Hola, primeramente muchas gracias. Resulta que me funciona todo, se actualizan las fotos al cambiar de registro, por lo que para ver datos, funciona pero al hacer un documento combinado o imprimirlo, me sitúa la misma foto siempre. Tengo windows 8.1 y office 2013. Podría enviar los archivos a algún correo.

  14. HUMBERTO CRUZ DIAZ

    Muchas gracias, a mi me funciona para lo que lo necesitaba.

  15. Mike

    Muchas gracias, me ha funcionado de maravilla.

  16. Gisella

    Excelente, muchas gracias, logre solucionar al 100 mi problema y ya tengo mis reportes actualizados, muchas gracias

  17. Antonio

    Muchas gracias. Ha funcionado a la primera. Y como se haria si en vez de insertar una foto fuera un documento word diferente para combinar con cada registro? Como podría cambiar el tamaño de la foto? Espero su respuesta. Gracias.

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

© 2024 Flopy.es

Tema por Anders NorenArriba ↑

Uso de cookies

Este sitio web utiliza cookies para que usted tenga la mejor experiencia de usuario. Si continúa navegando está dando su consentimiento para la aceptación de las mencionadas cookies y la aceptación de nuestra política de cookies, pinche el enlace para mayor información.

ACEPTAR
Aviso de cookies