简体   繁体   English

使用Apache POI读取Excel文件时出现异常

[英]Exception while reading excel files using apache poi

I am reading two excel sheets which have 97000 rows combined. 我正在阅读两个具有97000行的excel表格。 I get this exception when I run the program on eclipse. 在eclipse上运行程序时出现此异常。 It gets stuck at 92865 rows. 它卡在92865行。 Is there some problem in the code or is it a memory configuration problem. 代码中是否存在某些问题,或者是内存配置问题? iteratormaster is the iterator for the second workbook. iteratormaster是第二个工作簿的迭代器。 stringSet is a hash set. stringSet是一个哈希集。 It's running fine when I increase the heap size. 当我增加堆大小时,它运行良好。 It's doesn't work when I create a jar and distribute it on other machines. 创建jar并将其分发到其他计算机上时,它不起作用。 Any permanent solution? 有永久解决方案吗?

       while (iteratormaster.hasNext()){
           //jLabel5.setText("Processing record "+qw+" out of"+ total+ " "+ "(" +   (qw/total)*100+"%");
          Row rowmaster =   iteratormaster.next();
              int qw1= rowmaster.getRowNum();
               if (qw1%1500==0){
               //jProgressBar1.setValue(((qw+n)/total)*100);
               //    Thread.sleep(500);
               jLabel11.setText("Processing record "+(qw1+n)+" out of "+ total);
               jLabel11.paintImmediately(jLabel11.getVisibleRect());
               }
          Cell media1 = rowmaster.getCell(5,Row.CREATE_NULL_AS_BLANK);
          String gandu=media1.toString();
          b.add(gandu);
              //sorted.add(gandu);
          Cell cellmaster0 = rowmaster.getCell(4,Row.CREATE_NULL_AS_BLANK);
          if (stringSet.contains((cellmaster0).toString()))
          {
              rowindexa++;

              cellindexa=-1;
              Row rowa=sheeta.createRow(rowindexa);
              //Iterator<Cell> cellmaster = rowmaster.iterator();
              for (int cn=0;cn<rowmaster.getLastCellNum();cn++){
                  cellindexa++;
                  Cell cellmaster1= rowmaster.getCell(cn, Row.CREATE_NULL_AS_BLANK);
                  String aap = cellmaster1.toString();
                  Cell cella =rowa.createCell(cellindexa);
                  cella.setCellValue(aap);
                              if (aap.indexOf("\t")!=-1){
                              System.out.println(aap);}
              }


          }
          else {
              rowindextemp++;
              cellindextemp=-1;
              Row rowb=sheettemp.createRow(rowindextemp);
              //Iterator<Cell> celltemp1 = rowmaster.cellIterator();
              for (int cn1=0;cn1<rowmaster.getLastCellNum();cn1++){
                  cellindextemp++;
                  Cell celltemp2 = rowmaster.getCell(cn1,Row.CREATE_NULL_AS_BLANK);
                  String congress=celltemp2.toString();
                  Cell cellb = rowb.createCell(cellindextemp);
                  cellb.setCellValue(congress);
              }

              }


          }







Exception in thread "AWT-EventQueue-0" java.lang.OutOfMemoryError: GC overhead limit exceeded
at org.apache.xmlbeans.impl.store.Saver$TextSaver.resize(Saver.java:1592)
at org.apache.xmlbeans.impl.store.Saver$TextSaver.preEmit(Saver.java:1223)
at org.apache.xmlbeans.impl.store.Saver$TextSaver.emit(Saver.java:1144)
at org.apache.xmlbeans.impl.store.Saver$TextSaver.emitElement(Saver.java:926)
at org.apache.xmlbeans.impl.store.Saver.processElement(Saver.java:456)
at org.apache.xmlbeans.impl.store.Saver.process(Saver.java:307)
at org.apache.xmlbeans.impl.store.Saver$TextSaver.saveToString(Saver.java:1727)
at org.apache.xmlbeans.impl.store.Cursor._xmlText(Cursor.java:546)
at org.apache.xmlbeans.impl.store.Cursor.xmlText(Cursor.java:2436)
at org.apache.xmlbeans.impl.values.XmlObjectBase.xmlText(XmlObjectBase.java:1455)
at org.apache.poi.xssf.model.SharedStringsTable.getKey(SharedStringsTable.java:130)
at org.apache.poi.xssf.model.SharedStringsTable.addEntry(SharedStringsTable.java:176)
at org.apache.poi.xssf.usermodel.XSSFCell.setCellValue(XSSFCell.java:350)
at org.apache.poi.xssf.usermodel.XSSFCell.setCellValue(XSSFCell.java:320)
at defg.jButton4ActionPerformed(defg.java:1068)
at defg.access$9(defg.java:942)
at defg$9.actionPerformed(defg.java:539)
at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:2018)
at javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2341)
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:6505)
at javax.swing.JComponent.processMouseEvent(JComponent.java:3320)
at java.awt.Component.processEvent(Component.java:6270)
at java.awt.Container.processEvent(Container.java:2229)
at java.awt.Component.dispatchEventImpl(Component.java:4861)
at java.awt.Container.dispatchEventImpl(Container.java:2287)

Try to increase memory for your project - 尝试增加项目的内存-

In Eclipse - Right click your project > Run As > Run Configurations > Argument tab > under VM arguments section > add -Xms512M -Xmx1024M or > Apply 在Eclipse中-右键单击您的项目>运行方式>运行配置>参数选项卡>在VM参数部分下>添加-Xms512M -Xmx1024M或>应用

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM