Как читать первые n строк файла HUGE excel
Поэтому я пытаюсь написать программу, которая сканирует определенный шаблон в строке файла excel. А именно для N, за которым следует любая буква, то S или T (каждая буква, занимающая одну ячейку).
Проблема в том, что файл excel, который я использую, абсолютно массивный, с примерно 3000 строк и почти 1000 столбцов. Я пытаюсь найти этот шаблон только в первых 60 строках, чтобы уменьшить пространство кучи java. Как я могу подобрать свой алгоритм для этого? Я все еще получаю исключения из памяти.
Мой код выглядит следующим образом:
- Java для Excel 2010
- Сохранить документ Excel Apache POI
- Исключение NullpointerException при попытке прочитать файл XLSX
- Защитить файл excel с помощью java
- Удалите строку с определенным значением из excel в javacode
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; } }
- Я получаю формулу вместо содержимого ячейки
- Как читать данные из файла csv и удалять его?
- XSSFWorkbook занимает много времени, чтобы загрузить
- Сокращение чтения из файла excel в апплете
- Вставка избыточных данных в БД
- java Apache POI 3.9 Eclipse (чтение больших файлов xlsx)
- Исключение при чтении Xlxs filenull
- Добавить границу для объединенных строк и столбцов в HSSFCellStyle, не работающих в Windows