我有一个用Delphi-7编写的程序,它会打开一个基于模板的新Word文档。
打开文档后,自动化程序将跳转到书签(在模板中预定义)并在其中添加一些文本。
以下代码在Word 2003中工作正常,但在Word 2010中导致invalid variant operation错误消息(为清楚起见,我省略了try/except块)。

wrdapp:= CreateOleObject ('Word.Application');
wrdDoc:= wrdapp.documents.add (wrdApp.Options.DefaultFilePath[wdUserTemplatesPath] + '1.dot'
wrdApp.selection.goto (wdGotoBookmark, unassigned, unassigned, 'B1')

如果我将第三行替换为
wrdDoc.bookmarks.item ('B1').select

该程序在Word 2003中工作正常,但在Word 2010中仍然崩溃。

Word 2010“转到”书签的正确代码是什么?

最佳答案

Word 2010有一个与加载Normal.dotm有关的错误(也许还有插件,谁知道?)。像通常那样启动Word 2010时,会看到启动画面,并且Word执行一些初始化,包括加载Normal.dotm。通过自动化-CreateOleObject('Word.Application')启动Word时,它不会等到Normal.dotm加载并立即返回。但是,当仍在加载Normal.dotm时执行操作似乎会使Word崩溃。我为解决此问题所做的工作是创建一个仅等待模板加载的循环。您还可以选择延迟以给Word进行初始化的时间,但是到目前为止,循环仍然有效。

像这样的东西:

wrdapp := CreateOleObject('Word.Application');

//loop that waits for the normal template to load
while wrdapp.Templates.Count = 0 do
  Sleep(200);

//continue operations

PS:我这里没有提供Delphi,所以代码可能包含错误,但是您明白了

关于delphi - Word 201 0 auto 化: 'goto bookmark' ,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/5913665/

10-15 06:08