Modificar contactos de Microsoft Outlook desde Python
Pregunta
He escrito algunas herramientas de Python en el pasado para extraer datos de mis contactos de Outlook. Ahora, estoy tratando de modificar mis contactos de Outlook. Estoy descubriendo que Outlook está notando mis cambios, pero no se están pegando. Parece que estoy actualizando algo de caché, pero no el registro real.
El código es sencillo.
import win32com.client
import pywintypes
o = win32com.client.Dispatch("Outlook.Application")
ns = o.GetNamespace("MAPI")
profile = ns.Folders.Item("My Profile Name")
contacts = profile.Folders.Item("Contacts")
contact = contacts.Items[43] # Grab a random contact, for this example.
print "About to overwrite ",contact.FirstName, contact.LastName
contact.categories = 'Supplier' # Override the categories
# Edit: I don't always do these last steps.
ns = None
o = None
En este punto, cambio a Outlook, que se abre en la vista Tarjetas de direcciones detalladas.
Miro el resumen de contacto (sin abrirlo) y la categoría no cambia (¿no se actualiza?).
Abro el contacto y su categoría ha cambiado, a veces . (No estoy seguro de cuándo, pero parece que está relacionado con el caché). Si ha cambiado, me pide que guarde los cambios cuando lo cierro, lo cual es extraño, porque no he cambiado nada en la interfaz de usuario de Outlook.
Si salgo y reinicio Outlook, los cambios desaparecerán.
I sospechoso No llamo a SaveChanges , pero no puedo ver qué objeto lo admite.
Entonces mi pregunta es:
- ¿Debería llamar a SaveChanges? Si es así, ¿dónde está?
- ¿Estoy cometiendo algún otro error tonto, que hace que se descarten mis datos?
Solución
Creo que hay un método .Save () en el contacto, por lo que debe agregar:
contact.Save ()