使用Java在xlsx和xls文件中进行搜索

10

我有一个非常大的xlsx文件,其中包含大量数据,需要实现搜索选项。我已经使用了Apache POI jar和jxl jar来使行和列之间的搜索成为可能。但是,在大数据之间遍历需要花费很长时间,是否有任何jar文件或其他概念可用于更快地在Excel文件上进行搜索...

    String searchValue="my_value_to_search";
    for (int i = 0; i < sheet.getColumns(); i++) {
        for (int j = 0; j < sheet.getRows(); j++) {
            value = sheet.getCell(i, j);
            valueType = value.getType();
            String val=getCellType(valueType, value);
            if (val != null&&val==searchValue) {
                //   To do manipulation.
            }
        }
    }

3
我曾用多线程执行过这样的任务。我的主线程解析了 xlsx 文件并创建工作簿,然后它生成了 5 个其他线程,这些线程由主线程每次提供一定数量的记录进行操作。这样可以显著提高性能。 - Jatin Sehgal
1个回答

6
瓶颈通常是一次性在内存中表示大型XLSX文件所需的巨大内存量(XLS由设计决定,通常不会出现这个问题)。要在没有内存问题的情况下搜索真正庞大的XLSX文件,可以执行以下操作:

  • XLSX文件实际上是一个ZIP归档文件,您可以将其打开并读取内容,就像它是一个ZIP文件一样。
  • 在ZIP文件内部,有名为“xl/worksheets”的文件夹,其中包含sheet1.xml(以及sheet2.xml等)
  • 您可以使用普通的XmlReader解析这些XML文件(使用回调以获得最大性能和最少的内存消耗)。

希望这有所帮助。


谢谢您的回复。我的另一个问题是,对于我的大型xls文件会怎样处理? - ashokramcse
2
XLS文件最多只能有65K行,通常可以很好地适应内存。不幸的是,我不知道有类似XLSX的解决方法。 - geert3
在我的情况下,我有更多的工作表,每个工作表都填满了所有单元格的唯一值,因此解析xls文件需要更多的时间。 - ashokramcse
4
我从未使用过这个,但你可以查看https://poi.apache.org/poifs/how-to.html - 这似乎与上面描述的XML技术类似,但也适用于XLS:你可以动态解析文件并提取所需内容,因此不需要将整个文件加载到内存中。不确定在流中实际查找与XLS相关的数据需要多少工作量。祝好运。 - geert3

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接