2016-11-27 43 views
0

在SO和其他地方搜索几天后,我找不到明确的答案。因为我确信我不是第一个想知道这件事的人,所以我希望你们其中一位能够启发我。R/python - excel工作簿的动态版(单元格中的公式)

我有一个xlsx工作簿,在几个单元格中有简单的公式(如SUM,...)。

比方说:

A1 = 10 
A2 = 20 
A3 = A1+A2 (so basically A3=30 to start with) 

我需要运行一个脚本,将,例如改变A1的值(如一千次),并保存A3的值,统计的目的。理想情况下,这需要在Web服务器上完成。

现在,我正在使用[RXLconnect库,可以让我导入XLSX文件,编辑一些细胞和公式自动应用他们需要的是(所以如果我改变A1的价值,然后阅读A3,这些变化将被考虑在内)。

XLconnect的唯一问题是,如果我理解的很好,它会非常慢,因为Java依赖关系。编写一个单元格并阅读另一个单元格会花费过多的时间,因此数千次的时间可能会很痛苦。 例如,对“正常”工作簿进行10次迭代大约需要10秒。我可以对计算进行并行处理,但是根据JVM的不同,我已经阅读了并行处理。

我曾尝试其他的库和其他语言(R/openxlsx,R/XLSX,R/xlsReadWrite,Python的/ openpyxl),和他们都不动态更新的细胞。当我更新A1的值时,A3的读数仍然是30.或者我错误地使用它们。

因此我的问题: 是否有语言/库,允许导入一个excel文件,同时保持细胞之间的依赖关系,并且不依赖于Java?或者一种加速进程的方法(例如,通过调用JVM一次,而不是每次读取/写入单元格时)?

+1

为什么你需要Excel?为什么不用Python/R做计算呢? –

+0

不需要Excel将是梦想。不幸的是我需要在不同的人的Excel工作簿上运行脚本。他们已经将Excel用于各种有用的目的。我根本不能要求他们以不同的方式格式化他们的数据。 – jav

+0

在R和/或Python中执行所有计算,然后在格式化的Excel工作簿中输出最终结果 - 最终只输出一次**!当然,您可以使用默认连接到Excel对象库的Excel VBA(当然,R和Python也可以通过COM连接到它)。 – Parfait

回答

0

Java有一个很好的Excel库

<dependency> 
     <groupId>net.sourceforge.jexcelapi</groupId> 
     <artifactId>jxl</artifactId> 
     <version>2.6.10</version> 
    </dependency> 

你可以用Jython合并Java和Python的两个领域。

+0

谢谢大卫的回答。不幸的是,从我看到的情况来看,JXL不支持xlsx文件。由于我不能指望人们将他们的工作表格式化为xls,唯一的方法是将个人化的xlsx转换为xls,我不知道(很容易)xlsx是否可能。 – jav

+0

Xlsx使用xml的open docs格式,您可以使用xmltodict轻松地在python中读取xml –

相关问题