List of usage examples for org.apache.poi.ss.usermodel Sheet getLastRowNum
int getLastRowNum();
From source file:org.datanucleus.store.excel.ExcelUtils.java
License:Open Source License
/** * Convenience method to find the number of rows in a workbook. * This takes into account the fact that it seems to be impossible (with Apache POI 3.0.2) * to delete rows from a sheet. Consequently what we do is leave the row but delete * all cells. When returning the number of rows this ignores rows that have no cells. * @param op ObjectProvider for the object * @param wb Workbook/*www. j a v a 2 s. com*/ * @return Number of (active) rows (or 0 if no active rows) */ public static int getNumberOfRowsInSheetOfWorkbook(ObjectProvider op, Workbook wb) { int numRows = 0; final AbstractClassMetaData cmd = op.getClassMetaData(); Table table = op.getExecutionContext().getStoreManager() .getStoreDataForClass(op.getClassMetaData().getFullClassName()).getTable(); String sheetName = table.getName(); final Sheet sheet = wb.getSheet(sheetName); if (cmd.getIdentityType() == IdentityType.APPLICATION) { int[] pkFieldNumbers = cmd.getPKMemberPositions(); Object[] pkFieldValues = new Object[pkFieldNumbers.length]; for (int i = 0; i < pkFieldNumbers.length; i++) { pkFieldValues[i] = op.provideField(pkFieldNumbers[i]); } if (sheet != null && sheet.getPhysicalNumberOfRows() > 0) { for (int i = sheet.getFirstRowNum(); i < sheet.getLastRowNum() + 1; i++) { Row row = sheet.getRow(i); if (row != null) { boolean validRow = true; for (int j = 0; j < pkFieldNumbers.length; j++) { AbstractMemberMetaData pkMmd = cmd .getMetaDataForManagedMemberAtAbsolutePosition(pkFieldNumbers[j]); int colNumber = table.getMemberColumnMappingForMember(pkMmd).getColumn(0).getPosition(); Cell cell = row.getCell(colNumber); if (cell == null) { // Valid row. Apache POI would return cell as null if not active validRow = false; } } if (validRow) { numRows++; } } } } } else if (cmd.getIdentityType() == IdentityType.DATASTORE) { if (sheet != null && sheet.getPhysicalNumberOfRows() > 0) { int datastoreIdColNumber = table.getDatastoreIdColumn().getPosition(); for (int i = sheet.getFirstRowNum(); i < sheet.getLastRowNum() + 1; i++) { Row rrow = sheet.getRow(i); Cell cell = rrow.getCell(datastoreIdColNumber); if (cell != null) { // Valid row. Apache POI would return cell as null if not active numRows++; } } } } else { if (sheet != null && sheet.getPhysicalNumberOfRows() > 0) { for (int i = sheet.getFirstRowNum(); i < sheet.getLastRowNum() + 1; i++) { Row rrow = sheet.getRow(i); Cell cell = rrow.getCell(0); // Use first cell since no identity as such if (cell != null) { // Valid row. Apache POI would return cell as null if not active numRows++; } } } } return numRows; }
From source file:org.datanucleus.store.excel.query.ExcelCandidateList.java
License:Open Source License
/** * Constructor for the lazy loaded Excel candidate list. * @param cls The candidate class/*from w ww . j a va 2s. c o m*/ * @param subclasses Whether to include subclasses * @param ec execution context * @param cacheType Type of caching * @param mconn Connection to the datastore * @param ignoreCache Whether to ignore the cache on object retrieval */ public ExcelCandidateList(Class cls, boolean subclasses, ExecutionContext ec, String cacheType, ManagedConnection mconn, boolean ignoreCache) { super(cls, subclasses, ec, cacheType); this.mconn = mconn; this.ignoreCache = ignoreCache; // Count the instances per class by scanning the associated worksheets numberInstancesPerClass = new ArrayList<Integer>(); ExcelStoreManager storeMgr = (ExcelStoreManager) ec.getStoreManager(); Iterator<AbstractClassMetaData> cmdIter = cmds.iterator(); Workbook workbook = (Workbook) mconn.getConnection(); while (cmdIter.hasNext()) { AbstractClassMetaData cmd = cmdIter.next(); if (!storeMgr.managesClass(cmd.getFullClassName())) { // Make sure schema exists, using this connection storeMgr.manageClasses(new String[] { cmd.getFullClassName() }, ec.getClassLoaderResolver(), workbook); } Table table = ec.getStoreManager().getStoreDataForClass(cmd.getFullClassName()).getTable(); String sheetName = table.getName(); Sheet sheet = workbook.getSheet(sheetName); int size = 0; if (sheet != null && sheet.getPhysicalNumberOfRows() > 0) { // Take the next row in this worksheet int idColIndex = -1; if (cmd.getIdentityType() == IdentityType.APPLICATION) { int[] pkFieldNums = cmd.getPKMemberPositions(); // TODO Check all pk cols? AbstractMemberMetaData pkMmd = cmd .getMetaDataForManagedMemberAtAbsolutePosition(pkFieldNums[0]); idColIndex = table.getMemberColumnMappingForMember(pkMmd).getColumn(0).getPosition(); } else if (cmd.getIdentityType() == IdentityType.DATASTORE) { idColIndex = table.getDatastoreIdColumn().getPosition(); } else { idColIndex = 0; // No id column with nondurable, so just take the first } for (int i = sheet.getFirstRowNum(); i <= sheet.getLastRowNum(); i++) { Row row = sheet.getRow(i); if (row.getCell(idColIndex) != null) // Omit inactive rows { size++; } } } numberInstancesPerClass.add(size); } }
From source file:org.datanucleus.store.excel.query.ExcelCandidateList.java
License:Open Source License
protected Object retrieveObjectForIndex(int index) { if (index < 0 || index >= getSize()) { throw new NoSuchElementException(); }/* w w w . j a va 2s.c om*/ Iterator<AbstractClassMetaData> cmdIter = cmds.iterator(); Iterator<Integer> numIter = numberInstancesPerClass.iterator(); int first = 0; int last = -1; while (cmdIter.hasNext()) { final AbstractClassMetaData cmd = cmdIter.next(); int number = numIter.next(); last = first + number; if (index >= first && index < last) { // Object is of this candidate type, so find the object Table table = ec.getStoreManager().getStoreDataForClass(cmd.getFullClassName()).getTable(); String sheetName = table.getName(); Workbook workbook = (Workbook) mconn.getConnection(); final Sheet worksheet = workbook.getSheet(sheetName); if (worksheet != null) { int idColIndex = -1; if (cmd.getIdentityType() == IdentityType.APPLICATION) { int[] pkFieldNums = cmd.getPKMemberPositions(); // TODO Check all pk cols? AbstractMemberMetaData pkMmd = cmd .getMetaDataForManagedMemberAtAbsolutePosition(pkFieldNums[0]); idColIndex = table.getMemberColumnMappingForMember(pkMmd).getColumn(0).getPosition(); } else if (cmd.getIdentityType() == IdentityType.DATASTORE) { idColIndex = table.getDatastoreIdColumn().getPosition(); } else { idColIndex = 0; // No id column with nondurable, so just take the first } int current = first; for (int i = worksheet.getFirstRowNum(); i <= worksheet.getLastRowNum(); i++) { final Row row = worksheet.getRow(i); if (row.getCell(idColIndex) != null) // Omit inactive rows { if (current == index) { // This row equates to the required index final int rowNumber = i; if (cmd.getIdentityType() == IdentityType.APPLICATION) { final FetchFieldManager fm = new FetchFieldManager(ec, cmd, worksheet, rowNumber, table); Object id = IdentityUtils.getApplicationIdentityForResultSetRow(ec, cmd, null, false, fm); return ec.findObject(id, new FieldValues() { // ObjectProvider calls the fetchFields method public void fetchFields(ObjectProvider op) { op.replaceFields(cmd.getAllMemberPositions(), fm); } public void fetchNonLoadedFields(ObjectProvider sm) { sm.replaceNonLoadedFields(cmd.getAllMemberPositions(), fm); } public FetchPlan getFetchPlanForLoading() { return null; } }, null, ignoreCache, false); } else if (cmd.getIdentityType() == IdentityType.DATASTORE) { final FetchFieldManager fm = new FetchFieldManager(ec, cmd, worksheet, rowNumber, table); Object id = null; Cell idCell = row.getCell(idColIndex); int type = idCell.getCellType(); if (type == Cell.CELL_TYPE_STRING) { String key = idCell.getRichStringCellValue().getString(); id = ec.getNucleusContext().getIdentityManager() .getDatastoreId(cmd.getFullClassName(), key); } else if (type == Cell.CELL_TYPE_NUMERIC) { long key = (long) idCell.getNumericCellValue(); id = ec.getNucleusContext().getIdentityManager() .getDatastoreId(cmd.getFullClassName(), key); } return ec.findObject(id, new FieldValues() { // ObjectProvider calls the fetchFields method public void fetchFields(ObjectProvider op) { op.replaceFields(cmd.getAllMemberPositions(), fm); } public void fetchNonLoadedFields(ObjectProvider op) { op.replaceNonLoadedFields(cmd.getAllMemberPositions(), fm); } public FetchPlan getFetchPlanForLoading() { return null; } }, null, ignoreCache, false); } else { // Nondurable identity final FetchFieldManager fm = new FetchFieldManager(ec, cmd, worksheet, rowNumber, table); Object id = new SCOID(cmd.getFullClassName()); return ec.findObject(id, new FieldValues() { // ObjectProvider calls the fetchFields method public void fetchFields(ObjectProvider op) { op.replaceFields(cmd.getAllMemberPositions(), fm); } public void fetchNonLoadedFields(ObjectProvider sm) { sm.replaceNonLoadedFields(cmd.getAllMemberPositions(), fm); } public FetchPlan getFetchPlanForLoading() { return null; } }, null, ignoreCache, false); } } current++; } } } } else { first += number; } } return null; }
From source file:org.datanucleus.store.excel.valuegenerator.IncrementGenerator.java
License:Open Source License
protected ValueGenerationBlock<Long> reserveBlock(long size) { if (size < 1) { return null; }//from w w w . ja v a 2 s . com // Allocate value(s) ManagedConnection mconn = connectionProvider.retrieveConnection(); List<Long> oids = new ArrayList<Long>(); try { // Create the worksheet if not existing Workbook spreadsheetDoc = (Workbook) mconn.getConnection(); Sheet sheet = spreadsheetDoc.getSheet(worksheetName); Row row = null; Cell valueCell = null; if (sheet == null) { if (!storeMgr.getSchemaHandler().isAutoCreateTables()) { throw new NucleusUserException(Localiser.msg("040011", worksheetName)); } sheet = spreadsheetDoc.createSheet(worksheetName); row = sheet.createRow(0); Cell cell = row.createCell(0); cell.setCellValue(key); valueCell = row.createCell(1); valueCell.setCellValue(Double.valueOf(0)); } else { for (int i = sheet.getFirstRowNum(); i < sheet.getLastRowNum() + 1; i++) { Row tblRow = sheet.getRow(i); if (tblRow != null) { Cell tblCell = tblRow.getCell(0); if (tblCell.getStringCellValue().equals(key)) { row = tblRow; valueCell = row.getCell(1); break; } } } if (row == null) { row = sheet.createRow(sheet.getLastRowNum() + 1); Cell cell1 = row.createCell(0); cell1.setCellValue(key); valueCell = row.createCell(1); valueCell.setCellValue(Double.valueOf(0)); } } // Update the row if (valueCell != null) { NucleusLogger.VALUEGENERATION .debug("Allowing " + size + " values for increment generator for " + key); long currentVal = (long) valueCell.getNumericCellValue(); valueCell.setCellValue(Double.valueOf(currentVal + size)); for (int i = 0; i < size; i++) { oids.add(currentVal + 1); currentVal++; } } } finally { connectionProvider.releaseConnection(); } return new ValueGenerationBlock<Long>(oids); }
From source file:org.dbflute.helper.io.xls.DfTableXlsReader.java
License:Apache License
protected DfDataTable setupTable(Sheet sheet, String tableName, final DfDataTable table) { final int rowCount = sheet.getLastRowNum(); final Row nameRow = sheet.getRow(0); if (nameRow == null) { throwXlsReaderFirstRowNotColumnDefinitionException(tableName); }//from w w w . j a va 2s .c o m if (rowCount > 0) { setupColumns(table, nameRow, sheet.getRow(1)); setupRows(table, sheet); } else if (rowCount == 0) { setupColumns(table, nameRow, null); } return table; }
From source file:org.dbunit.dataset.excel.MyXlsTable.java
License:Open Source License
public MyXlsTable(String sheetName, Sheet sheet) throws DataSetException { int rowCount = sheet.getLastRowNum(); if (rowCount >= 0 && sheet.getRow(0) != null) { _metaData = createMetaData(sheetName, sheet.getRow(0)); } else {//from ww w . j a va2 s . c o m _metaData = new DefaultTableMetaData(sheetName, new Column[0]); } _sheet = sheet; // Needed for later "BigDecimal"/"Number" conversion symbols.setDecimalSeparator('.'); }
From source file:org.drools.decisiontable.parser.xls.ExcelParser.java
License:Apache License
private void processSheet(Sheet sheet, List<? extends DataListener> listeners) { int maxRows = sheet.getLastRowNum(); CellRangeAddress[] mergedRanges = getMergedCells(sheet); DataFormatter formatter = new DataFormatter(Locale.ENGLISH); FormulaEvaluator formulaEvaluator = sheet.getWorkbook().getCreationHelper().createFormulaEvaluator(); for (int i = 0; i <= maxRows; i++) { Row row = sheet.getRow(i);/*from w ww . ja v a 2 s. c om*/ int lastCellNum = row != null ? row.getLastCellNum() : 0; newRow(listeners, i, lastCellNum); for (int cellNum = 0; cellNum < lastCellNum; cellNum++) { Cell cell = row.getCell(cellNum); if (cell == null) { continue; } double num = 0; CellRangeAddress merged = getRangeIfMerged(cell, mergedRanges); if (merged != null) { Cell topLeft = sheet.getRow(merged.getFirstRow()).getCell(merged.getFirstColumn()); newCell(listeners, i, cellNum, formatter.formatCellValue(topLeft), topLeft.getColumnIndex()); } else { switch (cell.getCellType()) { case Cell.CELL_TYPE_FORMULA: String cellValue = null; try { CellValue cv = formulaEvaluator.evaluate(cell); cellValue = getCellValue(cv); newCell(listeners, i, cellNum, cellValue, DataListener.NON_MERGED); } catch (RuntimeException e) { // This is thrown if an external link cannot be resolved, so try the cached value log.warn("Cannot resolve externally linked value: " + formatter.formatCellValue(cell)); String cachedValue = tryToReadCachedValue(cell); newCell(listeners, i, cellNum, cachedValue, DataListener.NON_MERGED); } break; case Cell.CELL_TYPE_NUMERIC: num = cell.getNumericCellValue(); default: if (num - Math.round(num) != 0) { newCell(listeners, i, cellNum, String.valueOf(num), DataListener.NON_MERGED); } else { newCell(listeners, i, cellNum, formatter.formatCellValue(cell), DataListener.NON_MERGED); } } } } } finishSheet(listeners); }
From source file:org.eclipse.emfforms.internal.spreadsheet.core.renderer.table.EMFFormsSpreadsheetTableControlRenderer_ITest.java
License:Open Source License
@Test public void test() throws DatatypeConfigurationException, DatabindingFailedException, IOException { // write data @SuppressWarnings("restriction") final EMFFormsSpreadsheetExporter viewRenderer = new org.eclipse.emfforms.internal.spreadsheet.core.transfer.EMFFormsSpreadsheetExporterImpl( new org.eclipse.emfforms.internal.spreadsheet.core.transfer.EMFFormsSpreadsheetExporterImpl.ViewProvider() { @Override/*from w ww. jav a2s. co m*/ public VView getViewModel(EObject viewEobject, VViewModelProperties properties) { return getView(DetailEditing.NONE); } }); final EObject domainModel = getDomainModel(); final EObject domainModel2 = getDomainModel(); final Workbook workbook = viewRenderer.render(Arrays.asList(domainModel, domainModel2), null, null); final Sheet sheet = workbook.getSheet("root"); //$NON-NLS-1$ assertEquals(4, sheet.getLastRowNum()); // the rows 0,1,2 are fix and then 3,4 are added assertEquals(22, sheet.getRow(0).getLastCellNum());// there are 22 rows, (21 from the view model + 1 for the id) // read data final EMFFormsSpreadsheetImporter spreadsheetImport = EMFFormsSpreadsheetImporter.INSTANCE; final Collection<EObject> domainModels = spreadsheetImport .importSpreadsheet(workbook, TaskPackage.eINSTANCE.getTask()).getImportedEObjects(); assertEquals(2, domainModels.size()); for (final EObject model : domainModels) { assertTrue(EcoreUtil.equals(model, domainModel)); } }
From source file:org.eclipse.emfforms.internal.spreadsheet.core.renderer.table.EMFFormsSpreadsheetTableControlRenderer_ITest.java
License:Open Source License
@Test public void testWithDialogDetail() throws DatatypeConfigurationException, DatabindingFailedException, IOException { // write data @SuppressWarnings("restriction") final EMFFormsSpreadsheetExporter viewRenderer = new org.eclipse.emfforms.internal.spreadsheet.core.transfer.EMFFormsSpreadsheetExporterImpl( new org.eclipse.emfforms.internal.spreadsheet.core.transfer.EMFFormsSpreadsheetExporterImpl.ViewProvider() { @Override//from www .ja va2 s .c o m public VView getViewModel(EObject viewEobject, VViewModelProperties properties) { return getView(DetailEditing.WITH_DIALOG); } }); final EObject domainModel = getDomainModel(); final EObject domainModel2 = getDomainModel(); final Workbook workbook = viewRenderer.render(Arrays.asList(domainModel, domainModel2), null, null); final Sheet sheet = workbook.getSheet("root"); //$NON-NLS-1$ assertEquals(4, sheet.getLastRowNum()); // the rows 0,1,2 are fix and then 3,4 are added assertEquals(22, sheet.getRow(0).getLastCellNum());// there are 22 rows // read data final EMFFormsSpreadsheetImporter spreadsheetImport = EMFFormsSpreadsheetImporter.INSTANCE; final Collection<EObject> domainModels = spreadsheetImport .importSpreadsheet(workbook, TaskPackage.eINSTANCE.getTask()).getImportedEObjects(); assertEquals(2, domainModels.size()); for (final EObject model : domainModels) { assertTrue(EcoreUtil.equals(model, domainModel)); } }
From source file:org.eclipse.emfforms.internal.spreadsheet.core.transfer.EMFFormsSpreadsheetImporterImpl.java
License:Open Source License
/** * Returns a Map from EObject-ID to Sheet-ID to Row-ID. *//*from www .j a v a 2 s. co m*/ private Map<String, Map<Integer, Integer>> parseIds(Workbook workbook, SpreadsheetImportResult errorReports) { final Map<String, Map<Integer, Integer>> result = new LinkedHashMap<String, Map<Integer, Integer>>(); for (int sheetId = 0; sheetId < workbook.getNumberOfSheets(); sheetId++) { final Sheet sheet = workbook.getSheetAt(sheetId); final Row labelRow = sheet.getRow(0); if (labelRow == null) { errorReports.reportError(Severity.ERROR, MessageFormat.format( LocalizationServiceHelper.getString(getClass(), "ImportError_SheetEmpty"), //$NON-NLS-1$ sheet.getSheetName()), ErrorFactory.eINSTANCE.createSheetLocation(workbook.getSheetName(sheetId), 0, 0, "NO CELL")); //$NON-NLS-1$ continue; } final Cell idColumnLabelCell = labelRow.getCell(0, Row.CREATE_NULL_AS_BLANK); final Comment cellComment = idColumnLabelCell.getCellComment(); if (cellComment != null && cellComment.getString() != null && IGNORE_SHEET.equals(cellComment.getString().getString())) { continue; } final String idColumnLabel = getStringCellValue(idColumnLabelCell); if (!EMFFormsIdProvider.ID_COLUMN.equals(idColumnLabel)) { /* ID Column is missing. We have to ignore this sheet */ errorReports.reportError(Severity.ERROR, MessageFormat.format( LocalizationServiceHelper.getString(getClass(), "ImportError_FirstColumnWrong"), //$NON-NLS-1$ EMFFormsIdProvider.ID_COLUMN, idColumnLabel), ErrorFactory.eINSTANCE.createSheetLocation(workbook.getSheetName(sheetId), 0, 0, "NO CELL")); //$NON-NLS-1$ continue; } for (int rowId = 3; rowId <= sheet.getLastRowNum(); rowId++) { final Row row = sheet.getRow(rowId); if (row == null) { errorReports.reportError(Severity.INFO, LocalizationServiceHelper.getString(getClass(), "ImportError_EmptyRow"), //$NON-NLS-1$ ErrorFactory.eINSTANCE.createSheetLocation(workbook.getSheetName(sheetId), 0, rowId, EMFFormsIdProvider.ID_COLUMN)); continue; } final String eObjectId = getStringCellValue(row.getCell(0, Row.CREATE_NULL_AS_BLANK)); if (eObjectId == null || eObjectId.isEmpty()) { /* EObject id deleted */ errorReports.reportError(Severity.ERROR, LocalizationServiceHelper.getString(getClass(), "ImportError_NoEObjectID"), //$NON-NLS-1$ ErrorFactory.eINSTANCE.createSheetLocation(workbook.getSheetName(sheetId), 0, rowId, EMFFormsIdProvider.ID_COLUMN)); continue; } if (!result.containsKey(eObjectId)) { result.put(eObjectId, new LinkedHashMap<Integer, Integer>()); } // each sheetid should only be mapped once to each eobjectid if (result.get(eObjectId).containsKey(sheetId)) { /* duplicate EObject ID */ errorReports.reportError(Severity.ERROR, LocalizationServiceHelper.getString(getClass(), "ImportError_DuplicateEObjectID"), //$NON-NLS-1$ ErrorFactory.eINSTANCE.createSheetLocation(workbook.getSheetName(sheetId), 0, rowId, EMFFormsIdProvider.ID_COLUMN)); continue; } result.get(eObjectId).put(sheetId, rowId); } } return result; }