flopy.es

Díscolo blog de informática, y humor

flopy.es - Díscolo blog de informática, y humor

Combinar correspodencia con imágenes en Microsoft Word

Microsoft WordEn 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.

FFUUUPor 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

Crear una lista de enlaces a archivos desde Excel

Lo que os voy a enseñar en este artículo no es algo que se use todos los días, pero que he necesitado poner en práctica hace muy poco. Se trata de cómo hacer una lista de hipervínculos hacia archivos en excel.

Supongamos que tenemos un directorio muy largo con miles de archivos, y necesitamos hacer una lista en excel con todos estos archivos y que además, al pinchar en uno de ellos se nos abra el archivo correspondiente. En primer lugar necesitamos poder sacar de forma automática una lista de todos los archivos que necesitamos para que después la podamos pegar en una columna de excel. Para ello nos vamos al menú inicio, y pinchamos en “ejecutar”.

En el recuadro correspondiente escribimos “cmd” y pulsamos “enter”.

Con esto tendremos abierto el interfaz de comandos. Ahora nos toca recordar los antiguos comandos de MS-DOS para movernos por los directorios. Como comentario, deciros que si el listado de archivos está en una carpeta de red, lo mejor que podéis hacer es crear una unidad de red (Botón derecho en “mi pc” y pinchamos en “conectar a unidad de red”) para tener una letra de unidad de ese directorio y poder así acceder desde MS-DOS sin problemas. Vamos a suponer que queremos sacar la lista de archivos del directorio “system32″ que se encuentra dentro del directorio “windows”. Lo que haremos será escribir “cd \.” para movernos al directorio raíz del disco duro. Una vez ahí, escribiremos “cd windows” para irnos al directorio “windows” y luego “cd system32″ para irnos dentro del directorio “system32″.

Allí dentro escribiremos “dir” para sacar la lista de archivos y directorios, pero aquí nos encontramos con los primeros problemas. El tema es que necesitamos que en la pantalla se puedan visualizar todos los archivos, y como en ese directorio hay varios miles de ellos, no van a caber todos en la pantalla. El segundo problema que nos podemos encontrar es la longitud del nombre de los archivos, que puede que exceda del ancho de la pantalla de la línea de comandos. Ambos problemas se resuelven de la misma forma. Pinchamos primero en la esquina superior izquierda de la ventana de línea de comandos y hacemos click en “propiedades”.

Allí nos vamos a “diseño” y cambiamos los parámetros del tamaño del búfer de la pantalla. Ponemos un alto mayor que el número de archivos que tenemos y un ancho que sea suficiente para el nombre de archivo más largo. Por ejemplo voy a poner un ancho de 180 caracteres y un alto de 2500 filas.

Con esto, simplemente tecleamos el comando “dir” y en la ventana tendremos un listado de todos los archivos y directorios dentro de “system32″. Para copiar ese listado, volvemos a ir al icono de la esquina superior izquierda de la ventana, pinchamos en “editar” y luego en “seleccionar todo”. Una vez hecho esto, volvemos a ir al icono, nos vamos de nuevo a “editar” y pinchamos en “copiar”. Así ya tenemos todo el listado en el portapapeles.

Antes de pegar el listado en el excel, haremos un pequeño truco, que es pegarlo y volverlo a copiar por completo en el block de notas. Así eliminaremos todos los formatos extraños que pueda haber, y aprovecharemos para seleccionar exactamente lo que queremos copiar. Nos vamos al block de notas (inicio –> todos los programas –> Accesorios –> Block de notas), y pegamos lo que acabamos de copiar. Una vez pegado, eliminamos las filas en la parte superior e inferior que no nos interesan (Dejamos sólo los archivos).

Una vez pegado todo, volvemos a ir a “edición” –> “seleccionar todo”, y de nuevo le damos a “edición” –> “Copiar”.

Ahora nos vamos al excel y en la cuarta fila, columna “A”, pegamos el contenido del portapapeles.

Si os fijáis, ya tenemos un archivo por fila, pero no tenemos los hipervínculos y en lugar de tener sólo el nombre nos aparecen más cosas en cada celda (tenemos tamaño de fichero, fecha, etc… Primero vamos a dejar en cada celda sólo el nombre del fichero que nos interesa. Para ello usamos una fórmula de excel muy curiosa, que es la fórmula “extrae”. Nos ponemos en la columna de al lado y en una celda (en la B4) ponemos la siguiente fórmula

Acotación:

=Extrae (A4;37;255)

 

De entrada os puede parecer un poco rara, pero tiene mucho sentido. El “A4″ significa que vamos a poner en la celda “B4″ el valor que tiene la “A4″, pero modificado con los parámetros que os voy a explicar. El número 37 significa que de la celda “A4″ va a ignorar los 37 primeros caracteres (que son dónde aparece el tamaño del fichero y diversos datos que no nos interesan). Y el número 255 significa que del nombre del archivo vamos a coger 255 caracteres (pongo una cifra grande para asegurarme, pero en este caso llegarían 15 o 20). Al aplicar la fórmula, veremos que en la celda nos aparece el nombre del archivo. Si arrastramos la fórmula hacia abajo, haremos lo mismo con el resto de filas y tendremos el nombre de todos los archivos, tal que así:

En la celda A2 vamos a escribir el directorio completo en el que están contenidos esos archivos. Una buena forma de hacerlo sin fallos, es ir a la carpeta donde están los archivos y coger la ruta de la barra de direcciones. Así obtengo que la ruta completa es tal y cómo aparece en la siguiente imagen.

Pegamos esa ruta en la celda A2, pero introduciendo al final una barra de directorio (\)

Ahora lo que haremos será hacer una nueva lista en la columna “C”. Lo que haremos será poner en cada celda el contenido de la celda A2 seguido del contenido de cada una de las celdas de la columna “B”, para así obtener la ruta completa a cada archivo y directorio. Para ello usamos el siguiente comando:

Acotación:

=Concatenar($A$2;B4)

Lo que hemos hecho es lo siguiente: El “$A$2″ le indica al excel que en cada celda el comienzo de lo que se va a escribir es siempre el contenido de la celda “A2″. El B4 es el final de cada celda, pero no lleva el símbolo “$” para que cuando extendamos la fórmula a cada columna, automáticamente asigne el valor de cada una de las filas de la columna “B”.

Por fin tenemos la ruta completa de cada fichero en una columna de excel. Ahora necesitamos que al pinchar en cada una de las filas se abra el archivo correspondiente. No hay una forma de hacer esto con ninguna función de excel, por lo que vamos a necesitar crear una macro muy sencilla que nos haga esta labor. La macro cogerá el valor de la celda en la que está posicionado excel, y lo que hará será crear un hipervínculo con el contenido de la celda. Al llegar a una celda en blanco, la macro se parará. Para crearla nos vamos a “herramientas” –> “Macro” –> “Macros”

Una vez ahí, le ponemos a la macro un nombre (por ejemplo “HyperLinksInCells”) y pinchamos en “crear”.

Con esto se nos abrirá el editor de macros.

Una vez que estemos dentro del editor, simplemente añadimos este texto a la macro

Acotación:

Sub HyperLinksInCells()
For Each Celda In Range(ActiveCell, ActiveCell.End(xlDown))
ActiveSheet.Hyperlinks.Add Anchor:=Celda, Address:=Celda.Value
Next Celda
End Sub

Grabamos la macro y nos situamos en la celda C4. Una vez allí nos vamos a “herramientas” –> “Macros” –> “macro” y ejecutamos la macro que acabamos de crear.

Y listo. Por fin tenemos una enorme lista de archivos con sus correspondientes hipervínculos en excel.

Este método puede parecer un pequeño lío al principio, pero permite hacerlo sin usar ningún programa a mayores. De todas formas estoy seguro que no es la única forma de hacerlo. Si se os ocurre alguna otra, podéis usar los comentarios del artículo para dejarnosla.

Share

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. CERRAR