Java ApachePOI和EXCEL

Java ApachePOI和EXCEL,java,excel,apache-poi,Java,Excel,Apache Poi,我使用ApachePOIAPI访问Excel.xlsx文件,使用API我可以读/写单元格。 我的问题是:如何使用Excel GUI中打开的.xlsx文件实现这一点? 如果我尝试这样做,我会因并发访问同一资源而产生冲突(该进程无法访问该文件,因为它正被另一个进程使用)。 有人告诉我答案是Excel RTD和C语言,C++或其他语言。 但是我想继续使用Java,我能做什么?切换到linux是一种选择吗? 谢谢 AFAIK poi只在文件系统上工作,因此没有通过实时数据进行交互。我认为,如果要防止损坏

我使用ApachePOIAPI访问Excel.xlsx文件,使用API我可以读/写单元格。 我的问题是:如何使用Excel GUI中打开的.xlsx文件实现这一点? 如果我尝试这样做,我会因并发访问同一资源而产生冲突(该进程无法访问该文件,因为它正被另一个进程使用)。 有人告诉我答案是Excel RTD和C语言,C++或其他语言。 但是我想继续使用Java,我能做什么?切换到linux是一种选择吗?
谢谢

AFAIK poi只在文件系统上工作,因此没有通过实时数据进行交互。我认为,如果要防止损坏,您不应该在excel中仍处于打开状态时编辑
xlsx
文件

如果您想使用RTD,您应该尝试为其找到java绑定。我认为他们是基于COM的,所以也许JACOB可以帮助你

另见本讨论:


哦。顺便说一句,COM仅适用于Windows,因此我将继续使用Windows:)

同时通过两个单独的实体访问和修改资源并不意味着您将在两端获得一个同步版本。相反,如果你能做到这一点,你就有可能得到一个不正确/虚假/损坏的结果。翻译成java后,您可能会认为它是多个线程以不同步的方式更改变量

一些程序(notepad++、idea、eclipse on editor reactivation等)实现了额外的机制,可以检测文件是否在程序本身之外的文件系统上被修改,并为您提供选项,如:重新加载文件、忽略修改、合并等,其他人只是忽略这些覆盖文件的更改


我的猜测是,您必须做类似的事情,或者重新考虑更新文件和触发通知的场景。

正如其他用户所说,poi无法做到这一点。选项:

您最好的选择是RTD(您用C#编写一个精简的RTD“服务器”,将其安装在注册表中,并通过java与之对话,例如通过一些套接字;在excel中,用户只需在单元格中输入RTD公式,excel就会调用您的RTD服务器以获取最新数据)

您还可以使用COM将数据直接写入excel(也可以使用java库,如teamdev的Jetcel,或者您可以编写自己的COM包装器)

您可以编写自己的excel插件


最后,还有一些较低级别的解决方案,我听说过,但不明白。

您为什么希望同时从两个进程访问r/w中的同一文件?因为我想更新从修复连接中获得的实时报价/询问报价。此外,我将使用它来存储事务,因此在实时更新文件时有机会查看该文件将是非常有利的。在另一个.xlsx文件中,我使用以下函数='C:\Excel[data.xlsx]Foglio1'$1美元不是一件容易的事,对吧?