项目需要对第三方软件进行操作
给出的得是com接口 ,于是我们选择使用java调用com完成操作
java调用com有几种jar包可以使用 如jacob(java com bridge),jawin(貌似2005年是最后的更新时间),com4j(貌似是对企业级客户收费,1999刀)
我们选择了jacob作为我们的jar包
网上使用这个jar包对word进行操作的文章不少
ActiveXComponent comObj=new ActiveXComponent("TruckSim.Application");
Dispatch truckobject=(Dispatch)comObj.getObject();
Dispatch.call(truckobject, "GoHome");
Dispatch.call(truckobject,"DeleteDataSet","","News","External Control of Runs");
DeleteDataSet 是方法名 方法名后面可以带多个参数
Exception in thread "main" com.jacob.com.ComFailException: A COM exception has been encountered:At Invoke of: DeleteDataSetDescription: 8002000e / 无效的参数数目。
报错:无效的参数数目 这个错误是因为你方法的参数缺少或者多了导致的,注意: 输出参数也需要填上
Exception in thread "main" com.jacob.com.ComFailException: A COM exception has been encountered:At Invoke of: SetTableDescription: 80020005 / 类型不匹配。报错:类型不匹配
参数的类型不对,表示你的输入参数类型不对,Variant我遇到了double[][] 的输入参数 ,尝试了各种方法都不对原来在jacob中需要将数组变成SafeArray的类型
下面举个例子:Double[][] a={{1.2,3.3},{3.3,4.3}};SafeArray safeArray=new SafeArray(Variant.VariantDouble, 2, 2); for(int i = 0; i < 2; i++) { for (int
j = 0; j < 2; j++) { // set the value of safearray[i][j] to value polyPoints[i][j] safeArray.setDouble(i, j, kk[i][j]); System.out.println(kk[i][j]); }然后将safearray填入参数所在位置,成功将double[][]
执行
但是
在输出参数位置,我选择了String,StringBuffer,StirngBuilder,Variant.VariantString都没有能够输出正确的返回值
Variant a=New Variant(Variant.VariantString,true)
报错
无效的被呼叫方 没有找到有效的返回方法,目前正在使用python java未找到有效的COM返回