如何 运行 Microsoft 从 Java 访问宏
How to run Microsoft access macro from Java
我们正在将 Access 数据库用于一个项目以及 Java。我们在 Access 数据库中有一些宏,我们需要 运行 来自 Java 的宏。有什么方法可以从 Java?
执行这些宏
以下代码适用于 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();
}
}
}
备注:
这仅适用于安装了 Microsoft Access(实际应用程序,而不仅仅是 Access 数据库引擎)的 Windows 计算机。
运行 Java 代码的 JVM 的 "bitness" 应与安装的 Access 版本的 "bitness" 匹配(即,64 位或两者都是 32 位)。
在某些情况下可能需要进行一些调整,例如,Java 默认情况下可能会禁止 Web 服务器执行的代码外包到 cscript.exe。
我们正在将 Access 数据库用于一个项目以及 Java。我们在 Access 数据库中有一些宏,我们需要 运行 来自 Java 的宏。有什么方法可以从 Java?
执行这些宏以下代码适用于 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();
}
}
}
备注:
这仅适用于安装了 Microsoft Access(实际应用程序,而不仅仅是 Access 数据库引擎)的 Windows 计算机。
运行 Java 代码的 JVM 的 "bitness" 应与安装的 Access 版本的 "bitness" 匹配(即,64 位或两者都是 32 位)。
在某些情况下可能需要进行一些调整,例如,Java 默认情况下可能会禁止 Web 服务器执行的代码外包到 cscript.exe。