Bug 40285 - CellIterator Skips First Column
Summary: CellIterator Skips First Column
Status: RESOLVED FIXED
Alias: None
Product: POI
Classification: Unclassified
Component: HSSF (show other bugs)
Version: 3.0-dev
Hardware: All other
: P2 normal (vote)
Target Milestone: ---
Assignee: POI Developers List
URL:
Keywords: PatchAvailable
Depends on:
Blocks:
 
Reported: 2006-08-18 13:58 UTC by Danny Brain
Modified: 2007-01-16 01:46 UTC (History)
0 users



Attachments

Note You need to log in before you can comment on or make changes to this bug.
Description Danny Brain 2006-08-18 13:58:44 UTC
The CellIterator inner class (of HSSFRow, line 436) will skip the first cell.

Problem being: 
- nextId begins at 0
- the constructor calls findNext()
- findNext increments nextId before selecting the first populated cell.

Quick and easy fix is to default nextId to -1 so findNext() will increment to 0
first time around.

Not quite sure how to submit code changes, so thought this would do the job
(marked as PatchAvailable).
Comment 1 Jason Height 2006-08-25 22:22:38 UTC
Good catch. Keep it up. Applied to Svn. Feel free in inspect and comment if
reuqired.

Jason
Comment 2 Cam Moore 2006-10-01 00:37:40 UTC
This bug is still in the 3.0-alpha2-20060616 
Comment 3 Sam Barnum 2006-11-09 10:49:19 UTC
I've also experienced this behavior. Attaching a code snippet:

	private String extractExcel( InputStream stream ) throws IOException {
		HashSet set = new HashSet();
		HSSFWorkbook workbook = new HSSFWorkbook(stream);
		int sheetCount = workbook.getNumberOfSheets();
		int resultLength = 0;
		for( int i = 0 ; i < sheetCount ; i++ ) {
			//System.out.println( "Reading sheet #" + (i+1) );
			HSSFSheet at = workbook.getSheetAt( i );
			int rowCount = at.getPhysicalNumberOfRows();
			for (int j = 0; i< rowCount; j++)  {
				//System.out.println( "Reading row #" + (j+1) );
				HSSFRow row = at.getRow( j );
				if (row == null) break;
				for( Iterator iterator = row.cellIterator(); iterator.hasNext(); ) {
					HSSFCell cell = (HSSFCell)iterator.next();
					if( cell.getCellType() == HSSFCell.CELL_TYPE_STRING ) {
						String string = cell.getRichStringCellValue().getString();
						if( string != null && string.length() > 0 ) {
							if (set.add( string )) {
								resultLength += string.length();
								resultLength++;
							}
						}
					}
				}
			}
		}
		StringBuffer result = new StringBuffer(resultLength);
		for( Iterator iterator = set.iterator(); iterator.hasNext(); ) {
			result.append( (String)iterator.next() ).append( ' ');
		}
		return result.toString();
	}
Comment 4 Avik Sengupta 2007-01-16 01:46:18 UTC
Works as of 12Jan2007, Testcase added. 
http://issues.apache.org/bugzilla/show_bug.cgi?id=41366

Please verify!