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; } }