我需要使用Apache POI库读取大型(50000行和20列)excel文件。有another question要求完全相同的东西。我的尝试方法如下:
public static ArrayList<Double> readColumn(String excelFile,String sheetName, int columnNumber)
{
ArrayList<Double> excelData = new ArrayList<>();
XSSFWorkbook workbook = null;
try
{
workbook = new XSSFWorkbook(excelFile);
} catch (IOException e)
{
e.printStackTrace();
}
Sheet sheet = workbook.getSheet(sheetName);
for (int i = 0; i <= sheet.getLastRowNum(); i++)
{
Row row = sheet.getRow(i);
if (row != null) {
Cell cell = row.getCell(columnNumber);
if (cell != null)
{
// Skip cellls that are not numericals
if (cell.getCellTypeEnum() == CellType.NUMERIC)
{
excelData.add(cell.getNumericCellValue());
System.out.println(cell.getNumericCellValue());
}
}
}
}
return excelData;
}
不幸的是,虽然此方法在访问低索引列号(例如columnNumber = 1)时似乎有效,但我得到一个大columnNumber的OutOfMemoryError异常。文件本身不是太大,不能让我的电脑耗尽内存。我可以用很少的内存需求在Python中实现相同的结果。有更好的方法来解决这个问题吗?或者,是否有任何Java库可以让我这样做?