Как читать первые n строк файла HUGE excel

Поэтому я пытаюсь написать программу, которая сканирует определенный шаблон в строке файла excel. А именно для N, за которым следует любая буква, то S или T (каждая буква, занимающая одну ячейку).

Проблема в том, что файл excel, который я использую, абсолютно массивный, с примерно 3000 строк и почти 1000 столбцов. Я пытаюсь найти этот шаблон только в первых 60 строках, чтобы уменьшить пространство кучи java. Как я могу подобрать свой алгоритм для этого? Я все еще получаю исключения из памяти.

Мой код выглядит следующим образом:

import java.awt.List; import java.io.File; import java.io.FileInputStream; import java.io.IOException; import java.util.ArrayList; import org.apache.poi.EncryptedDocumentException; import org.apache.poi.openxml4j.exceptions.InvalidFormatException; import org.apache.poi.ss.usermodel.Workbook; import org.apache.poi.ss.usermodel.WorkbookFactory; import org.apache.poi.xssf.usermodel.XSSFCell; import org.apache.poi.xssf.usermodel.XSSFRow; import org.apache.poi.xssf.usermodel.XSSFSheet; import org.apache.poi.xssf.usermodel.XSSFWorkbook; public class ExcelReader { public int Reader(File file) throws IOException, EncryptedDocumentException, InvalidFormatException { FileInputStream fis = new FileInputStream(file); String filepath = file.getPath(); Workbook wb = WorkbookFactory.create(new File(filepath)); XSSFSheet sheet = (XSSFSheet) wb.getSheetAt(0); XSSFRow row; XSSFCell cell; ArrayList<Integer> list = new ArrayList<Integer>(); int rows; int cols = 0; int temp = 0; rows = sheet.getPhysicalNumberOfRows(); for (int i = 0; i < 10 || i < 60; i++) { row = sheet.getRow(i); if (row != null) { temp = sheet.getRow(i).getPhysicalNumberOfCells(); if (temp > cols) cols = temp; } } for (int r = 0; r <= 60; r++) { row = sheet.getRow(r); if (row != null) { for (int c = 0; c <= cols; c++) { int numblanks = 0; cell = row.getCell((short) c); if (cell != null) { //System.out.print(cell + "\t\t"); } else { //System.out.print("\t\t"); } if (cell != null && cell.getCellType() == XSSFCell.CELL_TYPE_STRING) { if ("N".equals(cell.getStringCellValue())) { for (int k = c; k <= cols; k++) { if ("-".equals(row.getCell(k).getStringCellValue())) { numblanks++; continue; } if ("S".equals(row.getCell(c + 2 + numblanks).getStringCellValue()) || "T".equals(row.getCell(c + 2 + numblanks).getStringCellValue())) { list.add((int) sheet.getRow(1).getCell(c).getNumericCellValue()); break; } } } } } System.out.println(); } } System.out.println(); System.out.println("Rows: " + rows); System.out.println("Columns: " + cols); System.out.println(list); return temp; } } 

Interesting Posts

vba Заменить все на листе с помощью подстановочных знаков

Джира не признает мою загрузку из CSV

Excel – не может найти способ получить excel для XML с текущей степью

Мне нужно суммировать количество раз, когда появляется ряд строк

VBA: как проверить, работает ли Outlook в автономном режиме, а если нет, то переведите его в автономный режим

Как написать '=' в ячейке листа с использованием openpyxl (или любого другого модуля) в python?

Как разместить каждую дату 2013 года на листе CSV / Excel?

Excel: проверьте, что все столбцы имеют другое значение

Как условно форматировать столбец в VBA на основе значения каждой ячейки и значения фиксированной ячейки?

Соответствие подстановочных массивов в Excel или R

Сумма столбца по дате

Как импортировать значение ячейки в массив для вставки в БД или объект?

excel: цветные ячейки столбца, если соответствующее значение найдено в другом столбце

Как использовать 32-битный клиент oracle для 64-битных Windows с помощью Excel для подключения базы данных?

Скрыть пользовательскую форму в VBA для работы с данными

Давайте будем гением компьютера.