import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import org.apache.log4j.Logger;
import org.apache.poi.hssf.usermodel.HSSFCell;
import org.apache.poi.hssf.usermodel.HSSFRow;
import org.apache.poi.hssf.usermodel.HSSFSheet;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
public class ExcelParser implements Iterator<List<String>> {
private static final Logger logger = Logger.getLogger(ExcelParser.class);
private InputStream is = null;
private Iterator<?> rowIterator = null;
public ExcelParser(String excelFile){
HSSFWorkbook book = null;
HSSFSheet sheet = null;
try {
is = new FileInputStream(excelFile);
book = new HSSFWorkbook(is);
sheet = book.getSheetAt(0);
rowIterator = sheet.rowIterator();
} catch (Exception e) {
logger.error(e.getMessage(), e);
}
}
public boolean hasNext(){
return rowIterator.hasNext();
}
public List<String> next(){
HSSFRow row = (HSSFRow)rowIterator.next();
List<String> erow = new ArrayList<String>();
Iterator<?> cellIterator = row.cellIterator();
while(cellIterator.hasNext()){
HSSFCell cell = (HSSFCell)cellIterator.next();
erow.add(this.getCellValue(cell));
}
return erow;
}
public void remove(){
throw new UnsupportedOperationException("本EXCEL解析器是只读的.");
}
private String getCellValue(HSSFCell cell){
String value = null;
//简单的查检列类型
switch(cell.getCellType())
{
case HSSFCell.CELL_TYPE_STRING://字符串
value = cell.getRichStringCellValue().getString();
break;
case HSSFCell.CELL_TYPE_NUMERIC://数字
long dd = (long)cell.getNumericCellValue();
value = dd+"";
break;
case HSSFCell.CELL_TYPE_BLANK:
value = "";
break;
case HSSFCell.CELL_TYPE_FORMULA:
value = String.valueOf(cell.getCellFormula());
break;
case HSSFCell.CELL_TYPE_BOOLEAN://boolean型值
value = String.valueOf(cell.getBooleanCellValue());
break;
case HSSFCell.CELL_TYPE_ERROR:
value = String.valueOf(cell.getErrorCellValue());
break;
default:
break;
}
return value;
}
public void close(){
if(is != null){
try {
is.close();
} catch (IOException e) {
logger.error(e.getMessage(), e);
}
}
}//close
}