Я раньше не использовал Com2Java или Com4j, но давным-давно использовал библиотеку под названием JavaCOMBridge (https://sourceforge.net/projects/jacob-project/).
Версия JavaCOMBridge, которую я использовал, не поддерживает множественное наследование, и я не вижу, как это можно сделать.
Забудьте о Visual J++. Это мерзость, созданная Microsoft и преданная забвению.
Если у вас есть опыт работы как с C, так и с Java, а количество API-интерфейсов, которые вам нужно связать, невелико, я бы рекомендовал использовать JNI напрямую.
Изменить Вот пример использования Excel:
package test;
import com.jacob.activeX.ActiveXComponent;
import com.jacob.com.Dispatch;
import com.jacob.com.Variant;
public class JaCoBTest {
public static void main(String[] args) {
String EXCEL_FILE = "FullPathOfAnExcelFile.xlsx";
// Using Excel as an example
ActiveXComponent app = new ActiveXComponent("Excel.Application");
// Modify a property, to show Excel window
app.setProperty("Visible", true);
// Get Excel workbook object
Dispatch workbook = app.getProperty("Workbooks").toDispatch();
// Call method, to open an Excel file
Dispatch.call(workbook, "Open", new Variant(EXCEL_FILE), new Variant("1"));
// Wait for 5 seconds
try {
Thread.sleep(1000);
} catch (InterruptedException iex) {
iex.printStackTrace();
}
// Close Excel without saving
workbook.call(workbook, "Close");
// Close is supposed to have three optional parameteters, but the line below is not working
//workbook.call(workbook, "Close", new Variant(false), Variant.DEFAULT, Variant.DEFAULT);
// Close Excel
Dispatch.call(app, "Quit");
}
}
В приведенном выше коде есть одна проблема — я не могу заставить работать необязательные параметры. Предполагается, что функция Workbook.Close принимает три необязательных параметра, но вызов всегда терпит неудачу с недопустимым количеством параметров.
Я также нашел веб-страницу, которой пользовался тогда: http://danadler.com/jacob/. страница выше содержит ссылку на часто задаваемые вопросы, но она немного устарела.
person
KC Wong
schedule
05.10.2016