我有一个代码片段,它循环遍历超链接(文件链接)对象列表(成员、anchor
和destination
),并将它们插入到选定的Word文档中。我可以搜索Word文档,并在它找到目标(锚)字符串时插入超链接。现在,我想循环遍历Word文档中的所有StoryRanges
,以确保不遗漏任何部分。我可以得到故事范围的数目,例如,使用WordApplication1->ActiveDocument->StoryRanges->Count
。但是,我不能以正确的形式传递参数来实际检索我接下来要搜索的故事范围,例如WordApplication1->ActiveDocument->StoryRanges->Item
。我有一个数字计数,但是Item
期望一个具有正确类型的VBA常量作为参数。我遗漏了什么?
编辑这里是代码。造成问题的原因是
wdFootnotesStoryID = WordApplication1->ActiveDocument->StoryRanges->Item(??????)->get_ID();
我以前尝试输入参数,如int,OleVariant。OleVariant的错误消息与预期的参数不匹配。我使用wdFootnotesStory试图引用枚举,但结果显示没有定义它。我也尝试过Int价值观。
下面是在OLESafe中定义的Word_2k.h枚举
enum class WdStoryType
{
wdMainTextStory = 1,
wdFootnotesStory = 2,
wdEndnotesStory = 3,
wdCommentsStory = 4,
wdTextFrameStory = 5,
wdEvenPagesHeaderStory = 6,
wdPrimaryHeaderStory = 7,
wdEvenPagesFooterStory = 8,
wdPrimaryFooterStory = 9,
wdFirstPageHeaderStory = 10,
wdFirstPageFooterStory = 11
};
这是主要代码。
//---------------------------------------------------------------------------
#include <vcl.h>
#pragma hdrstop
#include "Main.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma link "Word_2K_SRVR"
#pragma resource "*.dfm"
struct THyperLink
{
String Anchor;
String FilePath;
};
TList* linkList = new TList;
TForm1 *Form1;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
THyperLink* link = new THyperLink;
link->Anchor = "ABC.0001.0002.0003";
link->FilePath = "S:\\Development\\WordLinking\\Test\\ABC.0001.0002.0003.pdf";
linkList->Add(link);
THyperLink* link2 = new THyperLink;
link2->Anchor = "ABC.0001.0002.0004";
link2->FilePath = "S:\\Development\\WordLinking\\Test\\ABC.0001.0002.0004.pdf";
linkList->Add(link2);
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button1Click(TObject *Sender)
{
OleVariant Template = EmptyParam();
OleVariant NewTemplate = False;
OleVariant ItemIndex = 1;
OleVariant strToInsert = "Insert String";
OleVariant endOfLine = "TEST";
OleVariant wdStory = 6;
//OleVariant wdMove = 0;
OleVariant rng;
OleVariant strSearch;// = "ABC.0001.0002.0003";
OleVariant strLink; // = "S:Development\\WordLinking\\Test\\ABC.0001.0002.0003.pdf";
OleVariant lnkDoc = "S:\\Development\\WordLinking\\Test\\ZZZ.0001.0002.0003.docx";
OleVariant wdCharacter = "wdCharacter";
OleVariant cChars = 18;
OleVariant wdMove = "wdMove";
OleVariant wdTrue = true;
OleVariant wrdStoryRangeCount;
OleVariant wdFootnotesStoryID;
OleVariant rangeStory;
OleVariant wrdDoc;
WdStoryType wdFootnotesStory = 2;
try
{
WordApplication1->Connect();
}
catch (...)
{
ShowMessage("Microsoft word is not installed");
}
//Make application visible
WordApplication1->GetDefaultInterface()->Visible = True;
//Open document to be linked
WordApplication1->Documents->Open(lnkDoc);
//Open new document - add to document collection in application
//WordApplication1->Documents->Add(Template, NewTemplate);
//go to top of the document
WordApplication1->Selection->HomeKey(wdStory);
for (int index = 0; index <= linkList->Count-1; index++)
{
//Retrieve hyperlink object
THyperLink* link = reinterpret_cast<THyperLink*>(linkList->Items[index]);
strSearch = (OleVariant)link->Anchor;
strLink = (OleVariant)link->FilePath;
//
wrdStoryRangeCount = WordApplication1->ActiveDocument->StoryRanges->Count;
//WordApplication1->ActiveDocument->StoryRanges->Item(1);
wdFootnotesStoryID = WordApplication1->ActiveDocument->StoryRanges->Item(??????)->get_ID();
ShowMessage ("wdFootnotesStory ID: " + wdFootnotesStoryID);
//WordApplication1->ActiveDocument->get_
while (WordApplication1->Selection->Find->Execute(strSearch,Template,Template,Template,Template,Template,wdTrue))
//while (WordApplication1->ActiveDocument->StoryRanges->Item(wdFootnotesStory)->Find->Execute(strSearch,Template,Template,Template,Template,Template,wdTrue))
{
WordApplication1->Selection->Hyperlinks->Add(WordApplication1->Selection->Range,strLink,Template,Template,strSearch,Template);
}
//go back to top of Word document
WordApplication1->Selection->HomeKey(wdStory);
}
//Disconnect from word
WordApplication1->Disconnect();
}
//---------------------------------------------------------------------------
解决方案:在添加代码的过程中,我想我偶然发现了解决方案-- WdStoryType::wdFootnotesStory
。似乎我所缺少的只是类限定符引用。
发布于 2016-07-01 23:35:53
解决方案:在添加代码的过程中,我想我偶然发现了解决方案-- WdStoryType::wdFootnotesStory。似乎我所缺少的只是类限定符引用。
https://stackoverflow.com/questions/38104339
复制相似问题