我试图使用以下代码使用SWT将Office 2007/2010应用程序嵌入
Java应用程序中:
import java.awt.Canvas; import javax.swing.JFrame; import org.eclipse.swt.SWT; import org.eclipse.swt.awt.SWT_AWT; import org.eclipse.swt.layout.FillLayout; import org.eclipse.swt.ole.win32.*; import org.eclipse.swt.widgets.*; public class EmbeddingTest extends Canvas { private void initOleViewer(String target) { Display display = new Display(); Shell shell = SWT_AWT.new_Shell(display,this); shell.setLayout(new FillLayout()); OleFrame oleFrame = new OleFrame(shell,SWT.NONE); OleControlSite oleControlSite = new OleControlSite(oleFrame,SWT.NONE,"Word.Document"); oleControlSite.doVerb(OLE.OLEIVERB_INPLACEACTIVATE); OleAutomation word = new OleAutomation(oleControlSite); int[] applicationId = word.getIDsOfNames(new String[]{"Application"}); Variant property = word.getProperty(applicationId[0]); OleAutomation application = property.getAutomation(); int[] documentId = application.getIDsOfNames(new String[]{"Documents"}); property = application.getProperty(documentId[0]); OleAutomation documents = property.getAutomation(); shell.open(); Variant[] arguments = new Variant[] { new Variant(target) }; int[] automationIDs = documents.getIDsOfNames(new String[]{"Open","FileName"}); documents.invokeNoReply(automationIDs[0],arguments,new int[]{automationIDs[1]}); while (!shell.isDisposed()) { if (!display.readAndDispatch()) { display.sleep(); } } } public static void main(String[] args) { JFrame jFrame = new JFrame("Embedding Test"); jFrame.setVisible(true); EmbeddingTest viewer = new EmbeddingTest(); jFrame.add(viewer); jFrame.setSize(600,600); viewer.initOleViewer(args[0]); } }
当我不尝试在文档对象上调用“打开”Word在应用程序内成功嵌入,但是整个文件菜单被禁用.当我打“打开”应用程序崩溃与以下错误(DISP_E_EXCEPTION):
06001
有没有人知道如何解决这个问题或一个替代解决方案来嵌入Office应用程序在Java?谢谢!
更新:
单独查询“打开”和“文件名”的ID为’FileName’返回null,因此它的值不正确.我也尝试没有命名参数没有任何成功:
documents.invokeNoReply(automationIDs[0],arguments);