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

Evitar que te roben imágenes o rss de una web

Últimamente he tenido un poco olvidada la web. Cuando logré tener tiempo para dedicarle, he podido comprobar un par de cosas que no me han gustado demasiado. Por un lado, algunas páginas web han vinculado a imágenes del blog. Como sabeis, el contenido del mismo está bajo licencia “creative commons”, así que nada que objetar, pero el problema viene por el hecho de que cada vez que alguien de esas otras webs carga la página, me está consumiendo parte del tráfico que me otorga el hosting, y eso es un problema. Ese tráfico a mayores no me aporta nada (Ni ingresos por publicidad ni nada positivo) y hace que quede menos tráfico disponible para el uso habitual del blog.

Como el volumen de este tráfico se empieza a disparar, me he visto obligado a anular la carga de cualquier imagen desde fuera del blog. Esto quiere decir que si alguien vincula desde otra página web a una imagen del blog (para que aparezca en su sitio), el hosting denegará la petición y la imagen no se mostrará en esa web.

¿Cómo lograr eso? Pues con una modificación muy sencilla en la web. Simplemente subes al directorio donde están guardadas las imágenes un archivo llamado “htaccess.txt” con el siguiente contenido:

Acotación:

 

# NO CARGAR IMAGENES DESDE OTRAS PAGINAS
RewriteEngine on
RewriteCond %{HTTP_REFERER} !^$
RewriteCond %{HTTP_REFERER} !^http://eldominioquetengas.com [NC]
RewriteCond %{HTTP_REFERER} !^http://www.eldominioquetengas.com [NC]
RewriteRule .*\.(jpe?g|gif|bmp|png)$ – [F]

Luego, una vez subido por ftp, le cambiais el nombre al archivo, de “htaccess.txt” a “.htaccess” y listo. Así las imágenes no se cargarán en otra página web que no sea la vuestra.

Otro tema que he tenido que retocar es que algunas páginas ya iban a saco y copiaron todo el contenido de la web por medio de los rss. Para solucionarlo, instalé un módulo de RSS que sólo ofrece un cachito de cada noticia (no la noticia entera) y de nuevo usé un archivo .htaccess en el directorio donde estaba el archivo que genera los “rss” para redirigir la petición al nuevo módulo. Esto se hace de la misma forma que en caso anterior, pero cambiando el contenido del archivo por el siguiente:

Acotación:

# redirección de las rss
RewriteEngine on
RewriteRule ^(backend.php)$ http://www.flopy.es/modules/rss/rss.php?feed=news [R=301,L]
RewriteRule ^(backend.php/)$ http://www.flopy.es/modules/rss/rss.php?feed=news [R=301,L]

(Nótese que el archivo “backend.php” eran las antiguas “RSS” y que es redirigido ahora a la nueva dirección de las RSS)

Espero que os puedan servir a alguno para solucionar los cada vez más abundantes problemas de “robo” a saco de contenido.

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