如何在Java中打开word文档并等到用户结束编辑它

时间:2016-10-28 12:42:48

标签: java ms-word

在Java进程内部,可以执行以下操作:

  • 调用Microsoft Word以打开文档
  • 在用户完成编辑文档之前,请暂停Java进程
  • 当用户"关闭" Microsoft Word中的文档,还原Java进程并继续执行

我可以使用DesktopProcess类从Java打开Microsoft Word,但我无法等到Microsoft Words关闭。启动Microsoft Word时,我的Java进程始终继续处理。

是否可以在没有任何COM库的情况下执行此操作?

尝试我做了:

1)直接调用winword.exe

Process p = Runtime.getRuntime().exec("C:\\Program Files (x86)\\Microsoft Office\\Office14\\WINWORD.EXE \""+FILEPATH+"\"");
    p.waitFor();    

但是如果我在编辑打开的文档时打开另一个Word文档,则winword.exe不会关闭,因此,Java Process不会继续执行并继续等待。另外,我必须知道Microsoft Word安装在哪里 - 这是个坏主意 -

2)调用rundll32和fileprotocolhandler

Process p = Runtime.getRuntime().exec("rundll32 url.dll,FileProtocolHandler "+FILEPATH);
    p.waitFor();
    File file = new File(FILEPATH);
    while(true){
        try{
            FileChannel channel = new RandomAccessFile(file, "rw").getChannel();
            FileLock lock = channel.lock();
            break;
        }catch(Exception e){
            Thread.sleep(3*1000);
        }
    }

打开时,我尝试锁定文件。如果我可以锁定文件,我认为Microsoft Word已关闭。问题是有时此代码在打开Microsoft Word之前锁定文件,p.waitFor()无法正常工作。

3)创建一个可打开Word文档的visual basic .exe,当它关闭时,然后是.exe完成

Process p = Runtime.getRuntime().exec("C:/openWordAndWaitClose.exe "+FILEPATH);
    p.waitFor();

这很好,但是......我不太喜欢它,因为有几种技术可以达到目的。在未来的更新中,我不知道它是否会运作良好。

2 个答案:

答案 0 :(得分:2)

您可以使用Process.waitFor()方法

使用启动Microsoft Word的进程的进程对应

答案 1 :(得分:1)

正如其他人(L. Carbonne和Seelenvirtuose)所提到的,您可以使用Process.waitFor()方法。这是一个工作示例,它将调用Word并等待在打印之前退出"完成"。

public static void main(String[] args) throws IOException, InterruptedException {
    String cmd = "c:\\Program Files (x86)\\Microsoft Office\\Office15\\WINWORD.exe C:\\a.docx";
    Process p = Runtime.getRuntime().exec(cmd);
    p.waitFor();
    System.out.println("Done");
}