如何从java运行vbscript函数?

如何从java运行vbscript函数?,java,vbscript,powerpoint,Java,Vbscript,Powerpoint,从java代码中,我可以使用此代码运行vbscript Runtime.getRuntime().exec("wscript C:\\ppt\\test1.vbs "); 但是想知道如何从java调用vbscript的方法。例如在test1.vbs中 Set objPPT = CreateObject("PowerPoint.Application") objPPT.Visible = True Set objPresentation = objPPT.Presentation

从java代码中,我可以使用此代码运行vbscript

Runtime.getRuntime().exec("wscript C:\\ppt\\test1.vbs ");
但是想知道如何从java调用vbscript的方法。例如在test1.vbs中

Set objPPT = CreateObject("PowerPoint.Application")
    objPPT.Visible = True
    Set objPresentation = objPPT.Presentations.Open("C:\ppt\Labo.ppt")
    Set objSlideShow = objPresentation.SlideShowSettings.Run.View
    sub ssn1()
      objPPT.Run "C:\ppt\Labo.ppt!.SSN"
    End sub

如何从java中只调用ssn1()方法。否则我们可以从java代码中运行power point的宏。请帮助

我不太了解visual basic脚本方面,但是如果您可以将visual basic脚本作为COM对象公开,那么您可以通过使用框架(例如com4j)从java访问它的方法:


这应该会让您感到高兴:)转到WScript部分:

这是我的想法。。。在vbscript文件中,使脚本侦听命令行参数,该参数将指定要调用的方法。然后,在Java中,只要想调用文件中的特定方法,就只需要使用这个参数


否则,如果您想在java中访问powerpoint,则需要像在vbscript中一样访问其API,如果vbscript可以,这是可能的,但方法/语法可能会改变。

PowerPoint应用程序对象的.Run方法允许您在任何打开的演示文稿或加载的加载项中调用任何公共子例程或函数。

本文回答了OP的问题:

否则我们可以从java代码中运行power point的宏。请帮助

(但没有解决最初的vbscript问题)

还有JACOB库,它代表Java COM桥,您可以在这里找到:

使用它,您可以调用Excel、Word、Outlook、PowerPoint应用程序对象模型方法

我用Excel试过了,但没有用PowerPoint。(这只是一些示例代码,您可能希望使其更面向对象。)

注:

对于Excel,至少要运行以调用VBA宏/子例程,必须满足以下几点:

  • 包含宏的Excel工作簿必须处于“活动”状态(即必须 否则运行将找不到VBA子例程。(但是,工作簿不必 屏幕可见!!这意味着您可以调用加载项中的VBA宏!)
  • 然后,可以使用以下语法作为字符串文字传递宏的名称:
  • VBAProjectName.VBAModuleName.SubroutineName

    对于COM对象调用,可以使用名称查找版本或id号版本。ID号来自发布的COM接口(您可以在C++头文件中找到,或者可能有雅各伯为您查找)。 如果成功连接到Excel,请确保在连接完成后调用ComThread.Release()。最后把它放在适当的环境中。如果Java代码的进程在没有调用它的情况下终止,Excel上的COM引用计数将是错误的,并且Excel进程将永远不会终止,即使在您退出Excel应用程序之后也是如此。一旦发生这种情况,不用说,Excel就会开始表现出不正常的行为(当您下次尝试使用它时,它会运行,但无法加载任何插件/加载项)。如果发生这种情况(在调试过程中,尤其是为了更好地调试而绕过finally),则必须使用任务管理器终止Excel进程

    public class Excel {
        private static ActiveXComponent xl = null;
    
        public static Init() {
            try {
                ComThread.InitSTA();
                xl = ActiveXComponent.connectToActiveInstance("Excel.Application.14"); 
                // 14 is Office 2010, if you don't know what version you can do "Excel.Application"
                if (xl==null) {
                    // code to launch Excel if not running:
                    xl = new ActiveXComponent("Excel.Application");
                    Dispatch.put(xl, "Visible", Constants.kTrue);
                }
            }
            catch (Exception e) {
                ComThread.Release();            
            }
        }
    
        public static String Run(String vbName) {
            // Variant v = Dispatch.call(xl, "Run", vbName);    // using string name lookup
            Variant v = Dispatch.call(xl, 0x103, vbName);       // using COM offset
            // return Dispatch.get(this, "Name").getString();
            return v.getString();       
        }
    
        public static Variant Run1p(String vbName, Object param) {
            // Variant v = Dispatch.call(xl, "Run", vbName, param);
            return Dispatch.call(xl, 0x103, vbName, param);
            // return Dispatch.get(this, "Name").getString();
        }
    
        public static Worksheet GetActiveWorksheet () {
            // Dispatch d = xl.getProperty("ActiveSheet").toDispatch();
            Dispatch d = Dispatch.get(xl, 0x133).toDispatch ();
            return d; // you may want to put a wrapper around this...
        }
    }