2009-01-02 22 views
9

He escrito algunas herramientas de Python en el pasado para extraer datos de mis contactos de Outlook. Ahora, estoy intentando modificar mis contactos de Outlook. Descubro que mis cambios están siendo notados por Outlook, pero no se mantienen. Parece que estoy actualizando algunos caché, pero no el registro real.Modificar contactos de Microsoft Outlook desde Python

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 contactos (sin abrirlo) y la categoría no se modifica (¿no se actualiza?).

Abro el contacto y su categoría HA ha cambiado, a veces. (No estoy seguro de cuándo, pero parece que está relacionado con la caché). Si ha cambiado, me indica Guardar 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 desaparecen.

I sospechoso No llamo al SaveChanges, pero no puedo ver qué objeto lo admite.

Así que mi pregunta es:

  • ¿Debo llamar SaveChanges? Si es así, donde está?
  • ¿Estoy cometiendo otro error tonto, que está causando que mis datos sean descartados?

Respuesta

6

Creo que hay un método .Save() en el contacto, por lo que es necesario agregar:

contact.Save()

+0

que funciona. Muchas gracias – Oddthinking

+0

esto me ayudó a. Estaba haciendo contact.Save porque había estado leyendo la referencia de Microsoft. Sin() no hay mensaje de error, pero por supuesto no funciona. – sparklewhiskers

+0

Sí, desafortunadamente llamar a Save() toma aproximadamente un segundo para un solo elemento en la cuenta de IMAP para mí, y necesito modificar muchos elementos. ¿Algunas ideas? –

Cuestiones relacionadas