有人可以解释如何使用JACOB将VB代码转换为Java吗?

时间:2014-06-04 14:00:09

标签: java jacob

我正在尝试通过JACOB / JAVA从模板创建word文档。我似乎无法在JACOB上找到任何体面的文档。有人可以解释一下Dispatch的工作原理(.get | .put | .toDispatch)吗?我试图将以下代码转换为JACOB:

   Selection.MoveRight Unit:=wdCharacter, Count:=2, Extend:=wdExtend
   Selection.Cells.Merge

我试过了:

   Dispatch.call(oSelection, "MoveRight", 2, "Extend"); 
   Dispatch.call(oSelection, "Merge").toDispatch();

但它肯定没有用。

任何帮助都将不胜感激。

1 个答案:

答案 0 :(得分:1)

雅各布没有任何问题,它就像宣传的那样有效。

首先,您必须找到Word 2003的对象引用,您似乎正在使用它 其原因在于,当使用命名参数时,可以省略一些可选参数,并且可以不按顺序指定一些参数。所以我首先需要确认Selection.MoveRight的签名。以下是MoveRight的文档:http://msdn.microsoft.com/en-us/library/aa212388(v=office.11).aspx

expression.MoveRight(Unit, Count, Extend)

Unit和Extend是枚举,因此我们必须为它们找到正确的整数常量。 wdCharacter是1,wdExtend也是1(你如何得出这些值不同,最简单的方法是查看Office应用程序的VBA编辑器中的对象浏览器。)

假设oSelection是一个有效的对象,这应该有效:

Dispatch.call(oSelection, "MoveRight", 1, 2, 1); 

现在对于第二行,您忘记了翻译中的单元格。你需要这样的东西:

Dispatch cells=Dispatch.get(oSelection,"Cells").toDispatch();//Selection.Cells.
Dispatch.call(cells, "Merge");                                       //Selection.Cells.Merge()

请注意,我不会在第二行调用toDatch,因为Merge不会返回任何内容。 toDispatch用于将返回值(如第一行)转换为稍后可用于对该对象进行调用的Dispatch对象。