由于您正在处理的Excel文件很大,我建议您使用XSSF + SAX方法。
通过这种方法,您可以流式传输将数据存储在 Excel 文件内的 XML 文件。
您可以从 SAX 解析器生成的事件中捕获数据。将搜索数据与每一行进行比较。
对于每次搜索,您都必须流式传输整个 XML,但速度确实很快。
------------------------已编辑----------------------------------
详细地,
将 .xlsx 文件重命名为 .zip。它会给你一个 zip 文件。打开它,您将看到一个名为“xl”的文件夹。在“xl”文件夹内集中关注以下内容。
工作表文件夹:包含每个工作表的 xml 表示形式。共享字符串.xml:用于跨工作表存储所有字符串值的公共位置。样式.xml:保存应用于单元格的样式(颜色、公式...)的常见位置。工作簿.xml:包含有关 .xlsx 文件中所有工作表的信息
现在从 workbook.xm 开始旅程。在该文件内,所有工作表都被标签覆盖。
片材表示为<sheet>
Eg: <sheet name="General" sheetId="15" r:id="rId1"/>
以 r:id 为例,它将帮助您访问代表 .xlsx 文件的常规表的 General.xml。
一旦你有了 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.