I am trying to write a program that will read an .xlsx file, sort through 
the data counting instances it finds based on the if statements, and count each 
true instance.  I have gotten this program to work with the HSSF library (with 
the same file converted to .xls) but have a problem when trying to use the XSSF 
library.  Here is my code:

package logsheetsorter;

//Import libraries here
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
import org.apache.poi.xssf.usermodel.XSSFSheet;
import org.apache.poi.xssf.usermodel.XSSFCell;

class SLMonthlyClosed
{
    //Declare attributes here.
    XSSFWorkbook logBook;  //Declare a workbook to capture the excel page to be 
read.
    XSSFSheet slLotSheet;  //Declare a sheet to hold the ML Lot number 
information.
    XSSFCell currentCell;  //Declare a cell to hold the current cell being 
looked at.
    String cellContents;  //Declare a string object to be used to analyze the 
cell contents.
    String monthSelected;  //Declare a string attribute to convert the month 
object to.
    String yearSelected;  //Declare a string attribute to convert the year 
object to.
    String lotMonth;  //Declare a string attribute for the month substring of 
the lot number.
    String lotYear;  //Declare a string attribute for the year substring of the 
lot number.
    int count = 0;  //Declare an attribute to count the number of instances 
that found that match the user input.

    SLMonthlyClosed()
    {
        try
        {
            logBook = new XSSFWorkbook("C:/Documents and 
Settings/Cory/Desktop/LOT_NUMBER_LOG.xlsx");
            slLotSheet = logBook.getSheet("SL LOTS");
        }

        catch (Exception e)
        {
            System.out.println("WorkBook Read Error: " + e);
        }
    }

    int SLMonthlyClosedCount(Object year, Object month)
    {

        yearSelected = year.toString();  //Convert the object year to a string 
attribute.
        monthSelected = month.toString();  //Convert the object month to a 
string attribute.

        yearSelected = yearSelected.substring(3);  //Get the last digit of the 
year selected in order to compare to the lot number year.

        try
        {
            for (int row = 2; slLotSheet.getRow(row).getCell(1) !=null || 
slLotSheet.getRow(row).getCell(2) != null || slLotSheet.getRow(row).getCell(3) 
!= null; row++)  //Search through each row that is filled in in the worksheet.
            {
                cellContents = 
slLotSheet.getRow(row).getCell(1).getStringCellValue();  //Get the lot number 
of the current row being examined.
                
                if (cellContents.length() > 5)
                {
                    lotYear = cellContents.substring(3, 4);  //Get the 
substring of the lotYear to compare to the year selected.

                    if (lotYear.equals(yearSelected))  //Compare the lot year 
to the year selected.
                    {
                        lotMonth = cellContents.substring(4, 6);  //Get the 
substring of the lot number representing the month.

                        if (lotMonth.equals(monthSelected))  //Compare the lot 
number month with the selected month.
                        {
                            if (slLotSheet.getRow(row).getCell(8) != null)
                            {
                                count++;
                            }
                        }
                    }
                }
            }
        }

        catch (Exception a)
        {
            System.out.println("SL Monthly Closed Count Error: " + a);
        }

        return count;
    }
}


     I get the following error(s):

log4j:WARN No appenders could be found for logger (org.openxml4j.opc).
log4j:WARN Please initialize the log4j system properly.
Exception in thread "AWT-EventQueue-0" java.lang.OutOfMemoryError: Java heap 
space
        at org.apache.xmlbeans.impl.store.Cur$CurLoadContext.attr(Cur.java:3039)
        at org.apache.xmlbeans.impl.store.Cur$CurLoadContext.attr(Cur.java:3060)
        at 
org.apache.xmlbeans.impl.store.Locale$SaxHandler.startElement(Locale.java:3250)
        at 
org.apache.xmlbeans.impl.piccolo.xml.Piccolo.reportStartTag(Piccolo.java:1082)
        at 
org.apache.xmlbeans.impl.piccolo.xml.PiccoloLexer.parseAttributesNS(PiccoloLexer.java:1802)
        at 
org.apache.xmlbeans.impl.piccolo.xml.PiccoloLexer.parseOpenTagNS(PiccoloLexer.java:1521)
        at 
org.apache.xmlbeans.impl.piccolo.xml.PiccoloLexer.parseTagNS(PiccoloLexer.java:1362)
        at 
org.apache.xmlbeans.impl.piccolo.xml.PiccoloLexer.parseXMLNS(PiccoloLexer.java:1293)
        at 
org.apache.xmlbeans.impl.piccolo.xml.PiccoloLexer.parseXML(PiccoloLexer.java:1261)
        at 
org.apache.xmlbeans.impl.piccolo.xml.PiccoloLexer.yylex(PiccoloLexer.java:4808)
        at org.apache.xmlbeans.impl.piccolo.xml.Piccolo.yylex(Piccolo.java:1290)
        at 
org.apache.xmlbeans.impl.piccolo.xml.Piccolo.yyparse(Piccolo.java:1400)
        at org.apache.xmlbeans.impl.piccolo.xml.Piccolo.parse(Piccolo.java:714)
        at 
org.apache.xmlbeans.impl.store.Locale$SaxLoader.load(Locale.java:3439)
        at 
org.apache.xmlbeans.impl.store.Locale.parseToXmlObject(Locale.java:1270)
        at 
org.apache.xmlbeans.impl.store.Locale.parseToXmlObject(Locale.java:1257)
        at 
org.apache.xmlbeans.impl.schema.SchemaTypeLoaderBase.parse(SchemaTypeLoaderBase.java:345)
        at 
org.openxmlformats.schemas.spreadsheetml.x2006.main.WorksheetDocument$Factory.parse(Unknown
 Source)
        at org.apache.poi.xssf.usermodel.XSSFSheet.read(XSSFSheet.java:126)
        at 
org.apache.poi.xssf.usermodel.XSSFSheet.onDocumentRead(XSSFSheet.java:118)
        at 
org.apache.poi.xssf.usermodel.XSSFWorkbook.onDocumentRead(XSSFWorkbook.java:201)
        at 
org.apache.poi.xssf.usermodel.XSSFWorkbook.<init>(XSSFWorkbook.java:164)
        at 
org.apache.poi.xssf.usermodel.XSSFWorkbook.<init>(XSSFWorkbook.java:173)
        at logsheetsorter.SLMonthlyClosed.<init>(SLMonthlyClosed.java:25)
        at logsheetsorter.LogSheetSorter.actionPerformed(Main.java:225)
        at 
javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:1995)
        at 
javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2318)
        at 
javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:387)
        at 
javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:242)
        at 
javax.swing.plaf.basic.BasicButtonListener.mouseReleased(BasicButtonListener.java:236)
        at java.awt.Component.processMouseEvent(Component.java:6041)
        at javax.swing.JComponent.processMouseEvent(JComponent.java:3265)

     I'm not expereienced with using the log4j class.  I understand I need to 
configure a log4j.properties file in order for this to work.  There are not 
that many examples out there after looking around (or I'm looking in the wrong 
spots).  Anyone have any suggestions or references I can look at to learn this 
library and be able to read the .xlsx file?  Also, I tried to use 
org.apache.poi.ss.usermodel.* (Workbook, Sheet, Cell, and WorkbookFactory) to 
read the file with the same result.

Cory

PS For those subscribed to the general list I sent this message there as a 
mistake.  I apologize for the double post if you are getting this again.

Reply via email to