我正在创建一个Web应用程序,允许您从excel工作表中搜索一些记录。需要搜索的Excel工作表很大,它有10万行和500列。

为此应使用哪种方法?我只想允许用户在此excel工作表上执行搜索,所以我应该为此使用数据库(为此首先我需要在数据库中设置excel工作表值)?还是有其他比这更好的方法了?

Apache POI是否提供任何此类直接方法来搜索excel文件?

在这种情况下最有效的方法是什么。有关各个链接的帮助将不胜感激。

最佳答案

由于您要处理的excel文件很大,因此建议您使用XSSF + SAX方法。
使用这种方法,您可以流式传输将XML文件存储在excel文件中的XML文件。
您可以从SAX解析器生成的事件中捕获数据。将搜索数据与每一行进行比较。
对于每次搜索,您都必须流式传输整个XML,但这确实非常快。

------------编辑----------------------------------

详细地,

将.xlsx文件重命名为.zip。它将为您提供一个zip文件。打开它,您将看到一个名为“xl”的文件夹。在“xl”文件夹中,重点关注以下内容。

worksheets文件夹:包含每个工作表的xml表示形式。
sharedStrings.xml:用于在工作表中存储所有字符串值的常用位置。
styles.xml:,用于保存应用于单元格的样式(颜色,公式...)。
workbook.xml:包含有关.xlsx文件中所有工作表的信息

现在从workbook.xm开始旅程。在此文件中,所有工作表都被标记覆盖。
工作表表示为<sheet>例如:<sheet name="General" sheetId="15" r:id="rId1"/>以r:id为例,它将帮助您访问General.xml,它代表.xlsx文件的常规表。

拥有r:id后,http://poi.apache.org/spreadsheet/how-to.html#xssf_sax_api将帮助您读取XML文件并获取其内容。

OPCPackage pkg = OPCPackage.open(filename); //opens the .xlsx file
XSSFReader r = new XSSFReader( pkg ); //reads the xml fiels indide the .xlsx file
XMLReader parser = fetchSheetParser(sst); //SAX parser for parsing the XML files.

向解析器提供使用XSSFReader读取的XMl,编写一个事件处理程序,该事件处理程序实现DefaultHandler接口以捕获XMLReader生成的事件。
SharedStringsTable sharedStringsTable = reader.getSharedStringsTable(); // using this we can access sharedStrings.xml
StylesTable stylesTable = reader.getStylesTable(); // using this we can access styles.xml

Since we are streaming the XML, we dont have to worry about memory consumption.

09-27 00:03
查看更多