vba - Outlook 访问共享日历
问题描述
我正在 Embarcadero Delphi 中构建一个应用程序,其中包括希望从与当前用户共享的 Outlook 日历中读取约会。
我的问题是不了解在文件夹结构中的哪里可以找到这些。
在我的桌面上,我使用连接到 Exchange 服务器的 Outlook 2010(14.0.7188.5002 32 位)。我可以将同事共享的日历添加到 Outlook 中的日历视图:
我可以看到有关他们约会的选定信息,主要是他们是免费的还是预订的。正是我的外部工具想知道的。
现在我想通过 Outlook 对象模型访问这些日历。
(对于发布 Delphi 代码,我深表歉意,但它主要是直接进入进口的 TLB,而在其他地方,它就像广告宣传的那样工作)
我试过GetSharedDefaultFolder()
这样使用:
Recipient := FOutlook.NameSpace.CreateRecipient('bernie@someplace.com');
Recipient.Resolve;
SharedFolder := FOutlook.Namespace.GetSharedDefaultFolder(Recipient, olFolderCalendar);
但不幸的是,这在调用GetSharedDefaultFolder()
. 收件人是正确的,它解决得很好。抛出的错误(作为 Delphi 异常)是:
EOleException - Der versuchte Vorgang konnte nicht ausgeführt werden. Ein Objekt wurde nicht gefunden
这翻译回英文为:“无法完成尝试的操作。找不到对象”。
当我选择共享日历时,我将不胜感激有关如何访问 Outlook 在 UI 中向我显示的相同信息的任何输入,仅通过对象模型。
提前感谢您的时间,玛丽安
解决方案
我因未能展示我的整个代码、真实代码和完整代码而感到内疚。
@nitons 评论,特别是链接答案中的声明,即非共享日历只会显示为空,这促使我玩得更多。
我确实错过了对Recipient.Resolve
. 我真正的代码是遍历分发列表的成员,但我认为这并不重要,因为它正在工作。所以实际上我并没有创建一个新的Recipient
并解决它,但我有:
for i := 1 to DistList.MemberCount do
begin
Recipient := DistList.GetMember(i);
if not Recipient.Resolved
then Recipient.Resolve;
Folder := FOutlook.NameSpace.GetSharedDefaultFolder(Recipient, olFolderCalendar);
// ...
end;
如前所述,这失败了。我拨打了Resolve
无条件的电话,但仍然失败。
对我有用的是Recipient
从这样返回的那个中创建一个新的DistList.GetMember
:
Recipient := DistList.GetMember(i);
Recipient := FOutlook.NameSpace.CreateRecipient(Recipient.Address);
Recipient.Resolve;
Folder := FOutlook.NameSpace.GetSharedDefaultFolder(Recipient, olFolderCalendar);
这很好用。用调用来代替对日历的访问也是如此Recipient.FreeBusy
。
非常感谢 Dmitry 和 niton,你们帮了我很多。
推荐阅读
- php - 无法按 id 打印数据
- javascript - Chromeless:while 存在循环语法
- android - ListView 多选 onCreateActionMode 导致出现 2 个操作栏
- corda - net.corda.core.contracts.TransactionVerificationException$ContractRejection:合同验证失败:
- c# - 如何打包 Visual Studio aws 无服务器项目?
- reactjs - 使用 try/catch 处理 413(请求实体太大)错误
- c# - 找不到 net471 System.Configuration.Install 命名空间
- javascript - Promise.all 没有进入
- html - 如何更改行引导程序 3 中元素的顺序?
- c# - 如何从 URL 导入文本?