当前位置: 首页 > 知识库问答 >
问题:

Apache POI和EXCEL

汪凌
2023-03-14

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

共有3个答案

赵渊
2023-03-14

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

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

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

您可以编写自己的excel插件。

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

张高义
2023-03-14

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

一些程序(记事本、想法、编辑器重新激活时的eclipse等)实现了额外的机制,这些机制将检测文件是否在程序本身之外的文件系统上被修改,并为您提供选项,例如:重新加载文件、忽略修改、合并等,而其他人只是忽略这些更改覆盖文件。

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

林涵映
2023-03-14

AFAIK poi仅适用于文件系统,因此没有通过实时数据进行交互。如果您想防止损坏,我认为您不应该在Excel中仍然打开xlsx文件时编辑它。

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

另请参阅以下讨论:http://sourceforge.net/p/jacob-project/discussion/375946/thread/946012e8/

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

 类似资料:
  • 我有点迷失了 我试过3.17、4.0.0和5.0.0版。 或 我无法获得没有弃用或类型错误的代码:-( 我将Eclipe与Maven和Java11一起使用。在版本发布之后,我做了“更新项目”来更新Maven。

  • 在xlsx工作簿中,有些单元格具有一些无界的SUMIF公式,如下所示:。使用ApachePOI5.0.0对一个SUMIF函数的评估持续100ms,对给定工作簿的评估持续几分钟。 提高执行持续时间的一种方法是将公式绑定到如下内容:。在我的情况下,这不是一个解决方案,因为我不是xlsx文件的作者,系统从未知的人那里获取未知的xlsx文件(因此我不能仅仅告诉他们限制SUMIF范围)。 的当前实现迭代给定

  • 在执行此代码时,它在线程"main"java.lang.NoClassDefFoundError: org/apache/Commons/math3/util/ArithmeticUtils在org.apache.poi.poifs.property.RootProperty.set大小(RootProperty.java:59)在org.apache.poi.poifs.property.Dir

  • 我正在尝试用ApachePOI创建甜甜圈图,但没有任何信息或示例。我尝试使用饼图的例子,但没有成功。你能帮我解决这个问题吗?

  • 我已经编写了用于编写xlsm(Excel2007)的java文件。 使用ApachePOI库,编写xlsx文件是成功的。编写xlsm文件是成功的。但我无法打开xlsm文件,因为打开xlsm文件时出错。 使用ApachePOI库编写xlsm文件可行吗? 如果可以编写xlsm,请提供如何使用ApachePOI库编写xlsm文件的指南。 谢谢

  • 用户可以将Excel文档保存为. xls或xml-table。结果是一个具有固定结构的xml-file,Excel可以用它纠正工作。 可以用java中的ApachePOI打开这种类型的excel文件吗? 事先谢谢你,安德烈。

  • 我正在写一个程序,它需要从excel文件中读取和写入数据,而不考虑格式(xls或xlsx)。 我知道ApachePOI,但它似乎有不同的类来处理xls文件(HSSF)和xlsx(XSSF)文件。 任何人都知道我将如何实现我在这里的目标。(也欢迎使用POI以外的API的想法)。

  • 嗨,我想在第一行搜索一个字符串,如果找到了,我想移动那一列。