问题描述
我指的是本文档 https://poi.apache.org/components/spreadsheet/how-to.html#xssf_sax_api 来读取大型 excel (.xlsx) 文件。我能够使用这种方法读取整个 .xlsx 文件,但在从文件中读取记录时仍然坚持获取总行数。
根据要求,用户正在上传 .xlsx 文件,并且数据始终在 excel 的第一列 (A) 中可用。我从 .xlsx 文件中一一读取记录并发送到队列。但我也想将每次发送数据的记录总数发送到队列中。
我几乎花了 3 个小时来解决这个问题,但没有找到合适的代码。
任何帮助将不胜感激。
解决方法
POI 示例中有第二个流媒体示例。 http://svn.apache.org/repos/asf/poi/trunk/src/examples/src/org/apache/poi/examples/xssf/eventusermodel/XLSX2CSV.java
这个使用不同的流接口,暴露带有行号的 startRow 和 endRow 事件。
另一种方法是使用 excel-streaming-reader - 请参阅示例(https://github.com/pjfanning/excel-streaming-reader-sample/blob/master/src/main/java/com/github/pjfanning/poi/sample/StreamingRead.java) - 可以修改它以记录最后一行的最后一个 'getRowNum()' 值。