13,825
社区成员
发帖
与我相关
我的任务
分享
int __fastcall CrnSortObject(TStringList *lst, int nIndex1, int nIndex2)
{
int n1 = (int)lst->Objects[nIndex1];
int n2 = (int)lst->Objects[nIndex2];
if (n1 < n2) return -1;
else if (n1 > n2) return 1;
else return 0;
}
void __fastcall TForm1::Button1Click(TObject *Sender)
{
// 要打开的Doc文件名
WideString strDocName = L"D:\\ccrun\\csdn.doc";
// 创建Word对象
Variant vWordApp;
try
{
vWordApp = Variant::CreateObject("Word.Application");
}
catch(...)
{
MessageBox(Handle, "启动Word出错!",
Application->Title.c_str(), MB_OK | MB_ICONERROR);
return;
}
// 使Word界面可视
vWordApp.OlePropertySet("Visible", true);
// 打开指定的Word文档
Variant vDoc = vWordApp.OlePropertyGet("Documents").
OleFunction("Open", strDocName);
// 获取所有书签对象
Variant vBookmarks = vDoc.OlePropertyGet("bookmarks");
// 书签的总数
int nBookmarkCount = vBookmarks.OlePropertyGet("Count");
// 遍历所有书签,并获取到名字和起始位置
Variant vBookmark;
String strName;
int nStart;
TStringList *lst = new TStringList;
for (int i = 0; i < nBookmarkCount; i++)
{
vBookmark = vBookmarks.OleFunction("Item", i + 1);
strName = vBookmark.OlePropertyGet("Name");
nStart = vBookmark.OlePropertyGet("Start");
lst->AddObject(strName, (TObject *)nStart);
}
// 根据起始位置排序
lst->CustomSort(CrnSortObject);
// 将排序后的结果添加到Memo中
Memo1->Lines->Assign(lst);
delete lst;
// 后续代码依旧略过
// ...
}