POI封装之五

public class POISheet implements ISheet {

	private Sheet sheet;

	private IWorkbook wb;

	POISheet(Sheet sheet) {
		this.sheet = sheet;
	}

	@Override
	public IRow getRow(int index) {
		return newPOIRow(sheet.getRow(index));
	}

	@Override
	public Iterator<IRow> iterator() {
		final Iterator<Row> rowIterator = sheet.iterator();
		return new Iterator<IRow>() {

			@Override
			public boolean hasNext() {
				return rowIterator.hasNext();
			}

			@Override
			public IRow next() {
				Row row = rowIterator.next();
				if (null != row) {
					return newPOIRow(row);
				}
				return null;
			}

			@Override
			public void remove() {

			}
		};
	}

	@Override
	public Iterator<IRow> iterator(final IRowFilter filter) {

		final Iterator<Row> rowIterator = sheet.iterator();
		return new Iterator<IRow>() {

			@Override
			public boolean hasNext() {
				return rowIterator.hasNext();
			}

			@Override
			public IRow next() {

				IRow row = null;
				while (rowIterator.hasNext()) {
					IRow temp = newPOIRow(rowIterator.next());
					if (filter.filter(temp)) {
						row = temp;
						break;
					}
				}

				return row;
			}

			@Override
			public void remove() {

			}
		};
	}

	@Override
	public IRow createRow(int index) {
		return newPOIRow(sheet.createRow(index));
	}

	private POIRow newPOIRow(Row row) {
		POIRow r = new POIRow(row);
		r.setSheet(this);
		return r;
	}

	@Override
	public String getName() {
		return sheet.getSheetName();
	}

	@Override
	public IWorkbook getWorkbook() {
		return wb;
	}

	void setWorkbook(IWorkbook wb) {
		this.wb = wb;
	}

	@Override
	public ISheet setName(String name) {
		Workbook workbook = sheet.getWorkbook();
		workbook.setSheetName(workbook.getSheetIndex(sheet), name);
		return this;
	}

}


public class POIRow implements IRow {

	private Row row;

	private ISheet sheet;

	POIRow(Row row) {
		this.row = row;
	}

	@Override
	public ICell getCell(String x) {

		return getPOICell(x);
	}

	@Override
	public <T> T bind(IRowBinder<T> irb) {
		return irb.bind(this);
	}

	public ICell createCell(String x) {
		return createCell(x, ICell.CELL_TYPE_STRING);
	}

	@Override
	public ICell createCell(String x, int cellType) {
		return newPOICell(x, cellType);
	}

	private POICell newPOICell(String x, int cellType) {
		POICell cell = new POICell(row.createCell(Initor.LN.get(x), cellType),
				x);
		cell.setRow(this);
		return cell;
	}

	private POICell getPOICell(String x) {
		Cell cell_ = row.getCell(Initor.LN.get(x));
		if (cell_ == null) {
			cell_ = row.createCell(Initor.LN.get(x),ICell.CELL_TYPE_STRING);
		}
		POICell cell = new POICell(cell_, x);
		cell.setRow(this);
		return cell;
	}

	@Override
	public <T> void marshall(IRowMarshaller<T> marshaller, T t) {
		marshaller.marshall(this, t);
	}

	@Override
	public int getRowNum() {
		return row.getRowNum();
	}

	@Override
	public ISheet getSheet() {
		return this.sheet;
	}

	void setSheet(ISheet sheet) {
		this.sheet = sheet;
	}
}

猜你喜欢

转载自walkon.iteye.com/blog/2317882