- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我有一个代码片段,它循环遍历超链接(文件链接)对象(成员 anchor
和 destination
)并将它们插入到选定的 Word 文档中。我可以搜索 Word 文档并在找到目标( anchor )字符串时插入超链接。我现在想遍历 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
。看来我只缺少类限定符引用。
最佳答案
解决方案:在添加代码的过程中,我想我偶然发现了解决方案 - WdStoryType::wdFootnotesStory。看来我只缺少类限定符引用。
关于c++ - 使用 Embarcadero C++ (Builder) 从 Word OLE 中检索和循环故事范围,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38104339/
有谁知道 C#/Excel 的 Delphi 中的等价物是什么财务职能 : PMT、IPMT 和 PPMT ? 最佳答案 财务功能在System.Math单元。 他们有全名,如 NetPresentV
我正在使用 Embarcadero C 编译器(在 Windows 7 下)来创建控制台应用程序。 我使用的早期版本允许我在 Windows 下设置窗口的大小,并且它会很乐意解决我设置的任何大小(使用
这里有一个简短的问题: 我正在尝试在 32 位 Windows 7 上使用 Embarcadero C++ Builder XE3 试验内联汇编,特别是为了开始重新自学汇编,以备将来实际应用的可能性。
随着我对 VS 2010 越来越失望,我试图找到一些替代方案,我正在寻找 Embarcadero 的新版 C++ env。 当 VS 几乎主导市场时,学习新的(我认为不流行的)产品有什么意义吗? 谢谢
我正在使用 Embarcadero C++Builder 编译器。我想知道是否有办法在子类中隐藏使用 __property 关键字声明的属性。 例如,我正在创建一个派生自 TPanel 的控件,我在其
我正在尝试从Delphi 2007迁移到Embarcadero RAD Studio XE。 我收到大量警告。 它们都看起来像这样:我有一个声明“字符串”的过程: procedure SendMail
System.DateUtils.EncodeDateTime() 的文档说: Valid hour values are 0 through 24. (If the specified hour i
有人可以告诉我在哪里可以找到好的 BDE 安装程序吗? 这些链接将不再有效: http://info.borland.com/devsupport/bde/bdeupdate.html 最佳答案 ht
我在 FireMonkey 3D 中搜索了相机旋转和缩放的示例。就像使用鼠标左键围绕场景旋转相机并使用鼠标滚轮放大和缩小一样。 有人可以帮我吗? 最佳答案 下面的表单显示了一个简单的演示,只需保存 .
我需要一个用于 C++ 构建器的 WindowHandleToPlatform 示例我想使用句柄对表单执行 bitblt 和其他功能我可以使用 VCL 做到这一点并且效果很好。认为 WindowHan
我想知道如何在 TTcpServer 类上使用已连接的客户端?我在方法“ServerAccept”上连接了一个客户端,下一步是什么?我如何与他们合作?我需要从 ServerAccept 开始一个新线程
我有一个对象要删除: XMLDoc = new TXMLDocument(NULL); 但我不知道该怎么做...它不起作用: delete XMLDoc; XMLDoc->free(); 当我尝试只
我有一个带有结构的元素类,我想在数组中放置一些对象。我的类(class): class element { public: //properties AnsiString ON; /
我想就如何处理 Embarcadero CB10.1 的重新进入问题提出一些建议。在“禁用所有优化”设置为 true 的调试配置中编译。我在 Win7 上运行。 我有一个简单的测试用例。带有两个按钮的
试图让 NFC 在 Embarcadero XE5 中的 Android 上运行。从以下内容开始:https://forums.embarcadero.com/thread.jspa?threadID
昨天,我在 embarcadero delphi 2010 中安装了专为 Delphi 7 设计的 TPing 组件,但今天我注意到当我单击“开始”按钮时,由于访问冲突错误,该组件导致我的应用程序崩溃
将 TChangeTabAction 标准操作添加到我的操作列表后,我写了一个这样的函数: procedure TfrmMain.ChangeTab(TargetTab: TTabItem; Reve
我尝试过在 XE7、32 位下构建一些较旧的应用程序。当我在 XP 下执行它们时,它们执行得很好,尽管 https://www.embarcadero.com/products/cbuilder/fa
我正在尝试调试一段在单行中包含多个函数调用的密集代码。我想单步执行我编写的所有代码,但在这样做时,我不断地发现自己在提供的源代码中,包括汇编代码。 这发生在客户站点上运行 XE5 的计算机上。在我自己
已关闭。这个问题是 off-topic 。目前不接受答案。 想要改进这个问题吗? Update the question所以它是on-topic用于堆栈溢出。 已关闭10 年前。 社区去年审查了是否重
我是一名优秀的程序员,十分优秀!