gpt4 book ai didi

delphi - 外部应用程序 : Check if an Outlook Folder exists

转载 作者:行者123 更新时间:2023-12-02 03:02:15 25 4
gpt4 key购买 nike

解决方案如下

我一直在网上寻找解决方案,但在 Delphi 中似乎很难找到答案......

如果您熟悉 Outlook,请跳过此步骤

之前的一些解释:Outlook 中的联系人文件夹的组织方式类似于 Windows 中的文件夹树。联系人存储在联系人文件夹本身或子文件夹中。

我的代码确实将外部数据库中的联系人添加到 Outlook 联系人数据库中。为了防止重复输入,程序应该检查所有联系人,看看是否可以找到联系人条目的“旧”版本并更新它,如果不能,则创建一个新版本。
因此,我编写了一个递归程序,循环遍历文件夹并检查联系人。

在文件夹中,您可以通过(除了“下一个”、“上一个”和“最后一个”)获取子文件夹

Contacts:= Contacts.Folders.Getfirst

//现在选择的文件夹是之前选择的文件夹中的第一个子文件夹

如果我尝试获取此子文件夹的任何属性(例如“Items.Count”或其他任何内容),则会发生错误,因为此文件夹不存在。
因此,我想检查该文件夹是否存在,并跳到循环遍历该子文件夹,否则循环将在此处中断并且程序停止。

如果您熟悉 Outlook 的工作原理,请跳至此处
问题:

在调试器中,此联系人/文件夹变量(OleVariant,指向当前选定文件夹的指针)包含类似于以下内容的值:“$0074974C”。
如果没有子文件夹,则该值返回“$00000000”。这似乎是一个指针。

如何检查文件夹是否存在?

const
olFolderContacts = $0000000A;
var
outlook, NameSpace, Contact, ContactsRoot, Contacts: OleVariant;

begin
Outlook := CreateOleObject('Outlook.Application');
NameSpace := Outlook.GetNameSpace('MAPI');
ContactsRoot := NameSpace.GetDefaultFolder(olFolderContacts);
Contacts:= ContactsRoot;
//We're now in the Contacts Folder
Contacts:= Contacts.folders.getfirst;
//First Subfolder

什么不起作用:检查是否

联系人 = '$00000000'(作为字符串)

联系人 = '$00000000'(作为 OleVariant)

变量
val:TVarRec;
代码:
val:=联系人;
字符串(Contacts.VWideChar) = '$00000000'

变量
vntNothing:OLEVariant;
代码:
TVarData(vntNothing).VType := varDispatch;
TVarData(vntNothing).VDispatch := Nil;
联系人 = vntNothing

联系人 = 未分配
...
...

在 VBA 中这个问题有一个简单的解决方案

如果联系人=无

但是 Delphi 中没有“Nothing”...

想法?

最佳答案

您可以首先检查文件夹集合的计数:

if Contacts.Folders.Count = 0 then

Contacts := Contacts.Folders.GetFirst;
if VarIsClear(Contacts) then

关于delphi - 外部应用程序 : Check if an Outlook Folder exists,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3733535/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com