如何从Java运行Microsoft访问宏

时间:2015-04-10 10:34:18

标签: java ms-access macros

我们正在将Access数据库与Java一起用于项目。我们在Access数据库中有一些宏,我们需要从Java运行它们。有没有办法从Java执行这些宏?

1 个答案:

答案 0 :(得分:4)

以下代码适用于Windows 8.1上的NetBeans 8。它写一个临时的VBScript文件,然后使用cscript.exe运行它:

package runaccessmacro;

import java.io.*;

public class RunAccessMacro {

    public static void main(String[] args) {
        String dbFilePath = "C:\\Users\\Public\\Database1.accdb";
        String vbsFilePath = System.getenv("TEMP") + "\\javaTempScriptFile.vbs";
        File vbsFile = new File(vbsFilePath);
        PrintWriter pw;
        try {
            pw = new PrintWriter(vbsFile);
            pw.println("Set accessApp = CreateObject(\"Access.Application\")");
            pw.println("accessApp.OpenCurrentDatabase \"" + dbFilePath + "\"");
            pw.println("accessApp.DoCmd.RunMacro \"doRidLogUpdate\"");
            pw.println("accessApp.CloseCurrentDatabase");
            pw.println("accessApp.Quit");
            pw.close();

            Process p = Runtime.getRuntime().exec("cscript /nologo \"" + vbsFilePath + "\"");
            p.waitFor();
            BufferedReader rdr = 
                    new BufferedReader(new InputStreamReader(p.getErrorStream()));
            int errorLines = 0;
            String line = rdr.readLine();
            while (line != null) {
                errorLines++;
                System.out.println(line);  // display error line(s), if any
                line = rdr.readLine();
            }
            vbsFile.delete();
            if (errorLines == 0) {
                System.out.println("The operation completed successfully.");
            }
        } catch(Exception e) {
            e.printStackTrace();
        }
    }

}

注意:

  1. 这只适用于安装了Microsoft Access(实际应用程序,而不仅仅是Access数据库引擎)的Windows计算机。

  2. " bitness"运行Java代码的JVM应该与" bitness"匹配。安装的Access版本(即64位或32位)。

  3. 在某些情况下可能需要进行一些调整,例如,默认情况下,Web服务器执行的Java代码可能会被禁止外出到cscript.exe。