Java源码示例:org.apache.poi.hssf.record.Record

示例1
protected void initHeadHandler() {
	// The head handler do nothing, just pass
	headRecordHandler = new Abstract03RecordHandler(this) {
		@Override
		public void decode(Record record) throws Exception {
		}		
		@Override
		public boolean couldDecode(Record record) {
			return false;
		}
	};
	SSTRecordHandler sstRecordHandler = new SSTRecordHandler(this);
	StringRecordHandler stringRecordHandler = new StringRecordHandler(this);
	NumberRecordHandler numberRecordHandler = new NumberRecordHandler(this);
	BlankRecordHandler blankRecordHandler = new BlankRecordHandler(this);
	RowEndRecordHandler rowEndRecordHandler = new RowEndRecordHandler(this);
	BoundSheetRecordHandler boundSheetRecordHandler = new BoundSheetRecordHandler(this);
	EofRecordHandler eofRecordHandler = new EofRecordHandler(this);
	TailRecordHandler tailRecordHandler = new TailRecordHandler(this);
	headRecordHandler.setNext(sstRecordHandler).setNext(stringRecordHandler).setNext(numberRecordHandler)
			.setNext(blankRecordHandler).setNext(rowEndRecordHandler).setNext(boundSheetRecordHandler)
			.setNext(eofRecordHandler).setNext(tailRecordHandler);
}
 
示例2
public void process(Record r) {
  switch (r.getSid()) {
    case MergeCellsRecord.sid:
      mergeCellRecords.add((MergeCellsRecord) r);
      break;
    case SharedFormulaRecord.sid:
      shFrmRecords.add((SharedFormulaRecord) r);
      if (!(prevRec instanceof FormulaRecord)) {
        throw new RuntimeException("Shared formula record should follow a FormulaRecord");
      }
      FormulaRecord fr = (FormulaRecord) prevRec;
      firstCellRefs.add(new CellReference(fr.getRow(), fr.getColumn()));
      break;
    case ArrayRecord.sid:
      arrayRecords.add((ArrayRecord) r);
      break;
    case TableRecord.sid:
      tableRecords.add((TableRecord) r);
      break;
    default:
      plainRecords.add(r);
      break;
  }
  prevRec = r;
}
 
示例3
@Test
void removeObProjRecord() {
  Record valid1 = new UnknownRecord(0x01, new byte[]{});
  Record obProj1 = new UnknownRecord(0xD3, new byte[]{});
  Record valid2 = new UnknownRecord(0x02, new byte[]{});
  Collection<Record> records = new HashSet<>();
  records.add(valid1);
  records.add(obProj1);
  records.add(valid2);

  ExcelRecordCleaner.removeObProjRecord(records);

  assertTrue(records.contains(valid1), "A valid record is not removed");
  assertTrue(records.contains(valid2), "A valid record is not removed");
  assertFalse(records.contains(obProj1), "The ObProj record is removed");
}
 
示例4
/**
 * Create CFRecordsAggregate from a list of CF Records
 * @param rs - the stream to read from
 * @return CFRecordsAggregate object
 */
public static CFRecordsAggregate createCFAggregate(RecordStream rs) {
    Record rec = rs.getNext();
    if (rec.getSid() != CFHeaderRecord.sid &&
        rec.getSid() != CFHeader12Record.sid) {
        throw new IllegalStateException("next record sid was " + rec.getSid() 
                + " instead of " + CFHeaderRecord.sid + " or " +
                CFHeader12Record.sid + " as expected");
    }

    CFHeaderBase header = (CFHeaderBase)rec;
    int nRules = header.getNumberOfConditionalFormats();

    CFRuleBase[] rules = new CFRuleBase[nRules];
    for (int i = 0; i < rules.length; i++) {
        rules[i] = (CFRuleBase) rs.getNext();
    }

    return new CFRecordsAggregate(header, rules);
}
 
示例5
@Override
public void processRecord(Record record) {
    XlsRecordHandler handler = XLS_RECORD_HANDLER_MAP.get(record.getSid());
    if (handler == null) {
        return;
    }
    boolean ignoreRecord =
        (handler instanceof IgnorableXlsRecordHandler) && xlsReadContext.xlsReadWorkbookHolder().getIgnoreRecord();
    if (ignoreRecord) {
        // No need to read the current sheet
        return;
    }
    if (!handler.support(xlsReadContext, record)) {
        return;
    }
    handler.processRecord(xlsReadContext, record);
}
 
示例6
public void visitCellsForRow(int rowIndex, RecordVisitor rv) {

		CellValueRecordInterface[] rowCells = records[rowIndex];
		if(rowCells == null) {
			throw new IllegalArgumentException("Row [" + rowIndex + "] is empty");
		}


		for (int i = 0; i < rowCells.length; i++) {
			RecordBase cvr = (RecordBase) rowCells[i];
			if(cvr == null) {
				continue;
			}
			int nBlank = countBlanks(rowCells, i);
			if (nBlank > 1) {
				rv.visitRecord(createMBR(rowCells, i, nBlank));
				i+=nBlank-1;
			} else if (cvr instanceof RecordAggregate) {
				RecordAggregate agg = (RecordAggregate) cvr;
				agg.visitContainedRecords(rv);
			} else {
				rv.visitRecord((Record) cvr);
			}
		}
	}
 
示例7
@Override
public void processRecord(XlsReadContext xlsReadContext, Record record) {
    LabelSSTRecord lsrec = (LabelSSTRecord)record;
    ReadCache readCache = xlsReadContext.readWorkbookHolder().getReadCache();
    Map<Integer, Cell> cellMap = xlsReadContext.xlsReadSheetHolder().getCellMap();
    if (readCache == null) {
        cellMap.put((int)lsrec.getColumn(), CellData.newEmptyInstance(lsrec.getRow(), (int)lsrec.getColumn()));
        return;
    }
    String data = readCache.get(lsrec.getSSTIndex());
    if (data == null) {
        cellMap.put((int)lsrec.getColumn(), CellData.newEmptyInstance(lsrec.getRow(), (int)lsrec.getColumn()));
        return;
    }
    if (xlsReadContext.currentReadHolder().globalConfiguration().getAutoTrim()) {
        data = data.trim();
    }
    cellMap.put((int)lsrec.getColumn(), CellData.newInstance(data, lsrec.getRow(), (int)lsrec.getColumn()));
    xlsReadContext.xlsReadSheetHolder().setTempRowType(RowTypeEnum.DATA);
}
 
示例8
private static boolean isDVTPriorRecord(RecordBase rb) {
	if (rb instanceof MergedCellsTable || rb instanceof ConditionalFormattingTable) {
		return true;
	}
	short sid = ((Record)rb).getSid();
	switch(sid) {
		case WindowTwoRecord.sid:
		case UnknownRecord.SCL_00A0:
		case PaneRecord.sid:
		case SelectionRecord.sid:
		case UnknownRecord.STANDARDWIDTH_0099:
		// MergedCellsTable
		case UnknownRecord.LABELRANGES_015F:
		case UnknownRecord.PHONETICPR_00EF:
		// ConditionalFormattingTable
		case HyperlinkRecord.sid:
		case UnknownRecord.QUICKTIP_0800:
           // name of a VBA module    
           case UnknownRecord.CODENAME_1BA:
			return true;
	}
	return false;
}
 
示例9
/**
 * Method run
 * 
 * @throws IOException if the file contained errors 
 */
public void run() throws IOException {
    NPOIFSFileSystem fs  = new NPOIFSFileSystem(new File(file), true);
    try {
        InputStream is = BiffViewer.getPOIFSInputStream(fs);
        try {
            List<Record> records = RecordFactory.createRecords(is);

            for (Record record : records) {
                if (record.getSid() == FormulaRecord.sid) {
                    if (list) {
                        listFormula((FormulaRecord) record);
                    } else {
                        parseFormulaRecord((FormulaRecord) record);
                    }
                }
            }
        } finally {
            is.close();
        }
    } finally {
        fs.close();
    }
}
 
示例10
public void run() throws IOException {
    NPOIFSFileSystem fs   = new NPOIFSFileSystem(new File(file), true);
    try {
        InputStream     din   = BiffViewer.getPOIFSInputStream(fs);
        try {
            HSSFRequest     req   = new HSSFRequest();
    
            req.addListenerForAllRecords(new HSSFListener()
            {
                public void processRecord(Record rec)
                {
                    System.out.println(rec);
                }
            });
            HSSFEventFactory factory = new HSSFEventFactory();
    
            factory.processEvents(req, din);
        } finally {
            din.close();
        }
    } finally {
        fs.close();
    }
}
 
示例11
/**
 * Creates a new StyleRecord, for the given Extended
 *  Format index, and adds it onto the end of the
 *  records collection
 *
 * @param xfIndex the extended format index
 *
 * @return a new StyleRecord
 */
public StyleRecord createStyleRecord(int xfIndex) {
    // Style records always follow after
    //  the ExtendedFormat records
    StyleRecord newSR = new StyleRecord();
    newSR.setXFIndex(xfIndex);

    // Find the spot
    int addAt = -1;
    for(int i=records.getXfpos(); i<records.size() &&
            addAt == -1; i++) {
        Record r = records.get(i);
        if(r instanceof ExtendedFormatRecord ||
                r instanceof StyleRecord) {
            // Keep going
        } else {
            addAt = i;
        }
    }
    if(addAt == -1) {
        throw new IllegalStateException("No XF Records found!");
    }
    records.add(addAt, newSR);

    return newSR;
}
 
示例12
@Override
public void processRecord(Record record) {
	try {
		this.handle(record);
	} catch (Exception e) {
		throw new EasyExcelException(e);
	}
}
 
示例13
@Override
public void processRecord(Record record) {
	try {
		context.handle(record);
	} catch (Exception e) {
		// do nothing
	}
}
 
示例14
@Override
public void decode(Record record) {
	LabelSSTRecord labelSSTRecord = (LabelSSTRecord) record;
	int currColNum = labelSSTRecord.getColumn();
	handlerContext.addCol2CurrRowList(handlerContext.getSSTRecord().getString(labelSSTRecord.getSSTIndex()).toString());
	handlerContext.setCurrColNum(currColNum);
}
 
示例15
/**
   * sets the order of appearance for a given sheet.
   *
   * @param sheetname the name of the sheet to reorder
   * @param pos the position that we want to insert the sheet into (0 based)
   */
  public void setSheetOrder(String sheetname, int pos ) {
      int sheetNumber = getSheetIndex(sheetname);
      //remove the sheet that needs to be reordered and place it in the spot we want
      boundsheets.add(pos, boundsheets.remove(sheetNumber));

      // also adjust order of Records, calculate the position of the Boundsheets via getBspos()...
      int initialBspos = records.getBspos();
      int pos0 = initialBspos - (boundsheets.size() - 1);
      Record removed = records.get(pos0 + sheetNumber);
      records.remove(pos0 + sheetNumber);
records.add(pos0 + pos, removed);
      records.setBspos(initialBspos);
  }
 
示例16
@Override
public void decode(Record record) {
	BlankRecord blankRecord = (BlankRecord) record;
	int currColNum = blankRecord.getColumn();
	handlerContext.addCol2CurrRowList(BLANK);
	handlerContext.setCurrColNum(currColNum);
}
 
示例17
/**
 * handle
 * @param handlerContext
 * @param record
 */
public void handle(Record record) throws Exception {
	if (this.couldDecode(record)) {
		this.decode(record);
	} else if (next != null) {
		next.handle(record);
	} else {
		// just do nothing
		return;
	}
}
 
示例18
@Override
public void decode(Record record) throws Exception {
	// 产生新行,结束当前行
	if (handlerContext.getCurrColNum() != 0) {
		handlerContext.newRow(handlerContext.getCurrRowList());
		handlerContext.setCurrColNum(0);
	}
	handlerContext.initCurrRowList(0);
}
 
示例19
public Record getNext() {
	if(!hasNext()) {
		throw new RuntimeException("Attempt to read past end of record stream");
	}
	_countRead ++;
	return _list.get(_nextIndex++);
}
 
示例20
@Override
public void processRecord(XlsReadContext xlsReadContext, Record record) {
    TextObjectRecord tor = (TextObjectRecord)record;
    XlsReadSheetHolder xlsReadSheetHolder = xlsReadContext.xlsReadSheetHolder();
    Integer tempObjectIndex = xlsReadSheetHolder.getTempObjectIndex();
    if (tempObjectIndex == null) {
        LOGGER.debug("tempObjectIndex is null.");
        return;
    }
    xlsReadSheetHolder.getObjectCacheMap().put(tempObjectIndex, tor.getStr().getString());
    xlsReadSheetHolder.setTempObjectIndex(null);
}
 
示例21
/**
 * Find the given record in the record list by identity and removes it
 *
 * @param record the identical record to be searched for
 */
public void remove( Object record ) {
   // can't use List.indexOf here because it checks the records for equality and not identity
   int i = 0;
   for (Record r : records) {
       if (r == record) {
           remove(i);
           break;
       }
       i++;
   }
}
 
示例22
/**
 * @return the {@link Class} of the next Record. <code>null</code> if this stream is exhausted.
 */
public Class<? extends Record> peekNextClass() {
	if(!hasNext()) {
		return null;
	}
	return _list.get(_nextIndex).getClass();
}
 
示例23
/**
 * Returns the StyleRecord for the given
 *  xfIndex, or null if that ExtendedFormat doesn't
 *  have a Style set.
 *
 * @param xfIndex the extended format index
 *
 * @return the StyleRecord, {@code null} if it that ExtendedFormat doesn't have a Style set.
 */
public StyleRecord getStyleRecord(int xfIndex) {
    // Style records always follow after
    //  the ExtendedFormat records
    for(int i=records.getXfpos(); i<records.size(); i++) {
        Record r = records.get(i);
        if (r instanceof StyleRecord) {
            StyleRecord sr = (StyleRecord)r;
            if (sr.getXFIndex() == xfIndex) {
                return sr;
            }
        }
    }
    return null;
}
 
示例24
@Override
public void processRecord(XlsReadContext xlsReadContext, Record record) {
    NoteRecord nr = (NoteRecord)record;
    String text = xlsReadContext.xlsReadSheetHolder().getObjectCacheMap().get(nr.getShapeId());
    CellExtra cellExtra = new CellExtra(CellExtraTypeEnum.COMMENT, text, nr.getRow(), nr.getColumn());
    xlsReadContext.xlsReadSheetHolder().setCellExtra(cellExtra);
    xlsReadContext.analysisEventProcessor().extra(xlsReadContext);
}
 
示例25
/**
 * Find correct position to add new CFHeader record
 */
private static int findInsertPosForNewCondFormatTable(List<RecordBase> records) {

	for (int i = records.size() - 2; i >= 0; i--) { // -2 to skip EOF record
		Object rb = records.get(i);
		if (rb instanceof MergedCellsTable) {
			return i + 1;
		}
		if (rb instanceof DataValidityTable) {
			continue;
		}

		Record rec = (Record) rb;
		switch (rec.getSid()) {
			case WindowTwoRecord.sid:
			case SCLRecord.sid:
			case PaneRecord.sid:
			case SelectionRecord.sid:
			case UnknownRecord.STANDARDWIDTH_0099:
			// MergedCellsTable usually here
			case UnknownRecord.LABELRANGES_015F:
			case UnknownRecord.PHONETICPR_00EF:
				// ConditionalFormattingTable goes here
				return i + 1;
			// HyperlinkTable (not aggregated by POI yet)
			// DataValidityTable
		}
	}
	throw new RuntimeException("Did not find Window2 record");
}
 
示例26
/**
 * copied from Workbook
 */
private int findFirstRecordLocBySid(short sid) {
	int index = 0;
	for (Record record : _workbookRecordList.getRecords()) {
		if (record.getSid() == sid) {
			return index;
		}
		index ++;
	}
	return -1;
}
 
示例27
@Override
public void processRecord(XlsReadContext xlsReadContext, Record record) {
    HyperlinkRecord hr = (HyperlinkRecord)record;
    CellExtra cellExtra = new CellExtra(CellExtraTypeEnum.HYPERLINK, hr.getAddress(), hr.getFirstRow(),
        hr.getLastRow(), hr.getFirstColumn(), hr.getLastColumn());
    xlsReadContext.xlsReadSheetHolder().setCellExtra(cellExtra);
    xlsReadContext.analysisEventProcessor().extra(xlsReadContext);
}
 
示例28
@Override
public void processRecord(XlsReadContext xlsReadContext, Record record) {
    MergeCellsRecord mcr = (MergeCellsRecord)record;
    for (int i = 0; i < mcr.getNumAreas(); i++) {
        CellRangeAddress cellRangeAddress = mcr.getAreaAt(i);
        CellExtra cellExtra = new CellExtra(CellExtraTypeEnum.MERGE, null, cellRangeAddress.getFirstRow(),
            cellRangeAddress.getLastRow(), cellRangeAddress.getFirstColumn(), cellRangeAddress.getLastColumn());
        xlsReadContext.xlsReadSheetHolder().setCellExtra(cellExtra);
        xlsReadContext.analysisEventProcessor().extra(xlsReadContext);
    }
}
 
示例29
@Override
public void processRecord(XlsReadContext xlsReadContext, Record record) {
    ObjRecord or = (ObjRecord)record;
    for (SubRecord subRecord : or.getSubRecords()) {
        if (subRecord instanceof CommonObjectDataSubRecord) {
            CommonObjectDataSubRecord codsr = (CommonObjectDataSubRecord)subRecord;
            if (CommonObjectDataSubRecord.OBJECT_TYPE_COMMENT == codsr.getObjectType()) {
                xlsReadContext.xlsReadSheetHolder().setTempObjectIndex(codsr.getObjectId());
            }
            break;
        }
    }
}
 
示例30
@Override
public void processRecord(XlsReadContext xlsReadContext, Record record) {
    if (xlsReadContext.readSheetHolder() == null) {
        return;
    }
    xlsReadContext.readSheetHolder().setApproximateTotalRowNumber(((IndexRecord)record).getLastRowAdd1());
}