title: Read Huge Excel file(500K rows) in java
body: <p>I am trying to read a Big XLSX File.
  The Excel file has around 500K rows.I need to read col 2.</p>
  
  <pre><code>OPCPackage pkg;
  pkg = OPCPackage.open("File path");
  XSSFWorkbook myWorkBook = new XSSFWorkbook(pkg);
  Sheet sheet = myWorkBook.getSheetAt(2);
  Iterator&lt;Row&gt; rowIterator = sheet.iterator();
  while (rowIterator.hasNext())
  {
  Row row = rowIterator.next();
  if (row_num &gt; ROW_ESCAPE) 
  {
     Cell cell = row.getCell(2);
    if (!cell.getStringCellValue().toString().trim().isEmpty()) 
              {
                  System.out.println(cell.getStringCellValue().toString());
              }
  System.out.println("hi"+row_num);
          }
          row_num++;
   }
  </code></pre>
  
  <p>It prints till row 39723
  After that it throws the below exception</p>
  
  <pre><code>Exception in thread "AWT-EventQueue-0" java.lang.OutOfMemoryError: Java heap space
  at java.util.regex.Matcher.&lt;init&gt;(Matcher.java:225)
  at java.util.regex.Pattern.matcher(Pattern.java:1093)
  at org.apache.poi.xssf.usermodel.XSSFRichTextString.utfDecode(XSSFRichTextString.java:482)
  at org.apache.poi.xssf.usermodel.XSSFRichTextString.getString(XSSFRichTextString.java:297)
  at org.apache.poi.xssf.usermodel.XSSFCell.getStringCellValue(XSSFCell.java:262)
  at Main.get_titles(Main.java:484)
  at Main.analyze_Importsheet(Main.java:461)
  at Main.but_sel_imp_sheetActionPerformed(Main.java:220)
  at Main.access$000(Main.java:40)
  at Main$1.actionPerformed(Main.java:85)
  at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:2022)
  at javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2348)
  at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:402)
  at javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:259)
  at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(BasicButtonListener.java:252)
  at java.awt.Component.processMouseEvent(Component.java:6533)
  at javax.swing.JComponent.processMouseEvent(JComponent.java:3324)
  at java.awt.Component.processEvent(Component.java:6298)
  at java.awt.Container.processEvent(Container.java:2236)
  at java.awt.Component.dispatchEventImpl(Component.java:4889)
  at java.awt.Container.dispatchEventImpl(Container.java:2294)
  at java.awt.Component.dispatchEvent(Component.java:4711)
  at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4888)
  at java.awt.LightweightDispatcher.processMouseEvent(Container.java:4525)
  at java.awt.LightweightDispatcher.dispatchEvent(Container.java:4466)
  at java.awt.Container.dispatchEventImpl(Container.java:2280)
  at java.awt.Window.dispatchEventImpl(Window.java:2746)
  at java.awt.Component.dispatchEvent(Component.java:4711)
  at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:758)
  at java.awt.EventQueue.access$500(EventQueue.java:97)
  at java.awt.EventQueue$3.run(EventQueue.java:709)
  at java.awt.EventQueue$3.run(EventQueue.java:703)
  </code></pre>
  
  <p>Main.java:484=if (!cell.getStringCellValue().toString().trim().isEmpty()) 
  If i remove that line and just print the row number, it works fine.
  I need help how to get the string value for col 2.</p>