Outlook将PST文件中的互操作复制约会项目转换为其他日历

时间:2014-03-28 09:21:58

标签: c# calendar outlook office-interop

我尝试将约会项目从pst文件复制到用户邮箱中的日历类型的子文件夹(作为存档)。我也在复制邮件和联系人,并且完美无缺。我正在做的是复制每个项目并将其移动到新位置。目标MAPIFolder是用户邮箱的子文件夹,其子文件夹的类型为olFolderInbox,olFolderCalendar和olFolderContacts

 Microsoft.Office.Interop.Outlook.AppointmentItem clone = app.CreateItem((OlItemType.olAppointmentItem));
                    AppointmentItem source = item as  AppointmentItem;
                    clone = source.Copy();
                    clone.Move(destination);

有些项目正在被复制(例如,一整天的重复活动)但大部分都没有。而是代码在pst文件的源日历中创建多个副本!

调用source.Copy()时抛出异常我得到的异常:

System.ArgumentException was caught _HResult=-2147024809
_message=Could not complete the operation. One or more parameter values are not valid.
HResult=-2147024809 IsTransient=false  Message=Could not complete the operation.
One or more parameter values are not valid. Source=Microsoft Outlook StackTrace: at Microsoft.Office.Interop.Outlook._AppointmentItem.Copy()
   at Program.cs:line 679  InnerException:

如上所述,相同的代码在邮件和联系人项目以及某些日历项目上运行良好。

让我发疯!请帮忙。

由于

1 个答案:

答案 0 :(得分:0)

Outlook在决定是否可以复制或移动特定项目时尝试运行其业务逻辑,并调用处理更新/删除通知,甚至可能运行表单脚本(如果使用自定义表单)。如果使用Redemption是一个选项,请尝试以下内容 - 赎回不会尝试使用。

  RDOSession Session = new RDOSession();
  Session.MAPIOBJECT = Application.Session.MAPIOBJECT;
  RDOMail rItem = (RDOMail)Session.GetRDOObjectFromOutlookObject(item);
  RDOFolder rDestination = (RDOFolder)Session.GetRDOObjectFromOutlookObject(destination);
  rItem.CopyTo(rDestination);