Apache POI和EXCEL

我正在使用Apache POI API访问Excel .xlsx文件,使用API​​我可以读/写单元格。 我的问题是:我怎样才能在Excel GUI中打开.xlsx文件? 如果我尝试这样做,则会对并发访问同一资源时产生冲突(由于进程正在被另一进程使用,所以进程无法访问该文件)。 我被告知答案是Excel RTD和c#,c ++或其他语言。 但是我想坚持使用Java,我该怎么办? 切换到Linux的选项? 谢谢!!!

AFAIK poi只能在文件系统上运行,所以没有实时数据交互。 我想你不应该编辑xlsx文件,而它仍然打开在Excel中,如果你想防止腐败。

如果你想使用RTD,你应该尝试为此findjava绑定。 我认为他们是基于COM的,所以也许JACOB可以帮助你。 http://sourceforge.net/projects/jacob-project/

另见这个讨论: http : //sourceforge.net/p/jacob-project/discussion/375946/thread/946012e8/

哦。 顺便说一句。 COM只有Windows,所以我会留在Windows上:)

由两个独立的实体同时访问和修改一个资源并不意味着你最终会在两端同步一个版本。 相反,如果你设法做到这一点,你将有机会得到一个不正确的/假的/损坏的结果。 翻译成java,你可能会认为它是multithreading以非同步的方式改变一个variables。

一些程序(notepad ++,idea,eclipse在编辑器重新激活等)已经实现了额外的机制,它将检测文件是否在程序本身之外的文件系统上被修改过,并为你提供诸如reload file,ignore modification ,合并等,其他人只是忽略这些改变覆盖文件。

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

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

你最好的select是RTD(你用C#编写一个简单的RTD“服务器”,把它安装在registry中,然后通过某个套接字与java进行通信;在excel中,用户只需在其单元格中inputRTD公式,调用你的rtd服务器来获取最新的数据)。

你也可以使用COM直接写入数据(也可以使用java库来实现,比如teamdev的jexcel,或者你可以写自己的com封装)。

你可以写你自己的Excel插件。

最后,我听到了一些较低层次的解决scheme,但我听不懂。