Java Jacob:在Excel文件中调用vb函数而不调用;开放式;陈述
我使用Jacob调用Excel文件中宏中的VB函数 下面是我的代码:[我将文件和vb函数名作为参数传递给下面的java方法]Java Jacob:在Excel文件中调用vb函数而不调用;开放式;陈述,java,excel,jacob,vba,Java,Excel,Jacob,Vba,我使用Jacob调用Excel文件中宏中的VB函数 下面是我的代码:[我将文件和vb函数名作为参数传递给下面的java方法] private static void callExcelMacro(File file, String macroName) { ComThread.InitSTA(); final ActiveXComponent excel = new ActiveXComponent("Excel.Application"); try {
private static void callExcelMacro(File file, String macroName) {
ComThread.InitSTA();
final ActiveXComponent excel = new ActiveXComponent("Excel.Application");
try {
// This will open the excel if the property is set to true
excel.setProperty("Visible", new Variant(false));
final Dispatch workbooks = excel.getProperty("Workbooks").getDispatch();
//String eventSink = null ;
int id = Dispatch.get(workbooks, "Count").getInt();
System.out.println("le nbre" + id);
Dispatch.call(workbooks, "Add");
Dispatch workBook = Dispatch.call(workbooks, "Open", file.getAbsolutePath()).toDispatch();
//new DispatchEvents(sourceOfEvent, eventSink, progId)
//new DispatchEvents(workBook, w , "Excel.Application");
//System.out.println("le résultat"+eventSink);
//d.safeRelease();
Variant V1 = new Variant( file.getName() + macroName);
// Calls the macro
final Variant result = Dispatch.call(excel, "Run", V1);
// Saves and closes
//Dispatch.call(workBook, "Save");
com.jacob.com.Variant f = new com.jacob.com.Variant(true);
// Dispatch.call(workBook, "Close", f);
} catch (Exception e) {
e.printStackTrace();
} finally {
excel.invoke("Quit", new Variant[0]);
ComThread.Release();
}
}
代码运行正常,但我的问题是我不想调用指令
Dispatch workBook = Dispatch.call(workbooks, "Open", file.getAbsolutePath()).toDispatch();
显示默认宏执行的内容(带有输入字段的接口)
有没有一种方法可以在不“打开”Excel文件的情况下“运行”VB函数
谢谢。如果不打开文件,就无法在Excel工作簿中执行VBA函数 当然,可以通过禁用Excel应用程序对象上的事件来防止自动打开宏运行 在Excel VBA中,我们这样做:
Application.enableevents=false
(经常与屏幕更新和显示警报等其他设置结合使用)
在Java中,您可能会使用:
excel.setProperty("EnableEvents", new Variant(false));
我希望这能给你指明正确的方向(哈哈,砰,砰!)
Philip当包含编译器(?)的应用程序未启动时,VB代码将如何“运行”?我的Java代码将动态调用VB函数(通过按钮)。因此,正常的执行是:加载excel文件,运行宏并释放对象。希望我能回答你的问题。一旦你打开excel并启用代码,你也会启用工作簿\u open中嵌入或触发的任何代码,我担心你不能有一个(你想要的脚本)而没有另一个(工作簿\u open)这是在打开工作簿之前必须设置的Application EnableEvents属性,以防止执行任何自动打开或工作簿打开事件,请参见下面的我的答案…谢谢您提供正确的答案。有没有办法禁用Jacob的消息框?setProperty(“DisplayAlerts”,新变量(false));似乎不起作用。可能是excel.setProperty(“DisplayAlerts”,新变量(FALSE));嗯,除非你得到一个错误,否则它是工作的-你得到了一个实际的错误消息吗?在我调用的vb函数中,我把“Dim Msg Msg=MsgBox(“session”,vbInformation,“Module1”)”和可能的excel.setProperty(“DisplayAlerts”,新变量(FALSE));当我运行对vb函数的调用时,将显示消息“Sessi”。警报和MsgBox之间似乎有区别。当然有区别,警报是来自应用程序的消息,例如工作簿为只读或其他内容。消息框由开发人员控制,以向用户显示带有消息的对话框