我正在使用Apache POI作为实习生在这里读取/写入我公司的excel文件。我的程序通过excel文件,这是一个带有顶行计算机名称和左列用户名的大正方形。 240台计算机和342位用户。所有空格中的[计算机] [用户]表格为0,程序为每台计算机调用PSLoggedon并获取当前登录的用户名并增加0,所以在一个月后运行它后,它会显示谁登录了每台计算机最多。到目前为止它运行大约25分钟,因为我在实际调用PSLoggedon之前使用套接字来检查socket.connect。
如果没有读取或写入excel文件,只需调用所有PSLoggedon调用每台计算机,大约需要9分钟。因此,阅读和写作显然需要10-15分钟。问题是,我在计算机上调用PSLoggedon,然后打开excel找到[计算机] [用户]的[x] [y]点,然后写入+ = 1然后关闭它。因此,我认为它需要这么长时间的原因是因为它打开和关闭文件这么多?我可能完全错了。但我无法通过一次打开和读/写,只打开和关闭文件一次来想出一种方法来加快速度。有什么想法吗?
答案 0 :(得分:3)
正常情况下,Apache-POI非常快,如果您遇到某些问题,那么您可能需要检查以下几点:
POI的日志记录可能已启用,您需要将其关闭: 您可以将其中一个-D添加到JVM设置中以执行此操作:
-Dorg.apache.poi.util.POILogger=org.apache.poi.util.NullLogger
您可能正在将VM堆设置为较低值,请尝试增加。
首选XLS而不是XLSX。
答案 1 :(得分:1)
User, Computer, Count
INSERT
UPDATE
或PSLoggedon
您的表格
SELECT Computer, User, Count from Data ORDER BY Computer, User
(或根据您的Excel文件布局切换订单),循环浏览ResultSet
并直接编写结果。答案 2 :(得分:1)
这是一个老问题,但从我看到的情况来看:
Map<ComputerName, Map<UserName, Count>>
。同时获取List<ComputerName>
和List<UserName>
以记住行/列标题。整个电子表格的整数不到90,000 ---无需引入繁重的数据库机器。Map
和List<UserName>
。