private void pushCellValue(XlsBiffBlankCell cell) { double _dValue; LogManager.Log(this).Debug("pushCellValue {0}", cell.ID); switch (cell.ID) { case BIFFRECORDTYPE.BOOLERR: if (cell.ReadByte(7) == 0) m_cellsValues[cell.ColumnIndex] = cell.ReadByte(6) != 0; break; case BIFFRECORDTYPE.BOOLERR_OLD: if (cell.ReadByte(8) == 0) m_cellsValues[cell.ColumnIndex] = cell.ReadByte(7) != 0; break; case BIFFRECORDTYPE.INTEGER: case BIFFRECORDTYPE.INTEGER_OLD: m_cellsValues[cell.ColumnIndex] = ((XlsBiffIntegerCell)cell).Value; break; case BIFFRECORDTYPE.NUMBER: case BIFFRECORDTYPE.NUMBER_OLD: _dValue = ((XlsBiffNumberCell)cell).Value; m_cellsValues[cell.ColumnIndex] = !ConvertOaDate ? _dValue : tryConvertOADateTime(_dValue, cell.XFormat); LogManager.Log(this).Debug("VALUE: {0}", _dValue); break; case BIFFRECORDTYPE.LABEL: case BIFFRECORDTYPE.LABEL_OLD: case BIFFRECORDTYPE.RSTRING: m_cellsValues[cell.ColumnIndex] = ((XlsBiffLabelCell)cell).Value; LogManager.Log(this).Debug("VALUE: {0}", m_cellsValues[cell.ColumnIndex]); break; case BIFFRECORDTYPE.LABELSST: string tmp = m_globals.SST.GetString(((XlsBiffLabelSSTCell)cell).SSTIndex); LogManager.Log(this).Debug("VALUE: {0}", tmp); m_cellsValues[cell.ColumnIndex] = tmp; break; case BIFFRECORDTYPE.RK: _dValue = ((XlsBiffRKCell)cell).Value; m_cellsValues[cell.ColumnIndex] = !ConvertOaDate ? _dValue : tryConvertOADateTime(_dValue, cell.XFormat); LogManager.Log(this).Debug("VALUE: {0}", _dValue); break; case BIFFRECORDTYPE.MULRK: XlsBiffMulRKCell _rkCell = (XlsBiffMulRKCell)cell; for (ushort j = cell.ColumnIndex; j <= _rkCell.LastColumnIndex; j++) { _dValue = _rkCell.GetValue(j); LogManager.Log(this).Debug("VALUE[{1}]: {0}", _dValue, j); m_cellsValues[j] = !ConvertOaDate ? _dValue : tryConvertOADateTime(_dValue, _rkCell.GetXF(j)); } break; case BIFFRECORDTYPE.BLANK: case BIFFRECORDTYPE.BLANK_OLD: case BIFFRECORDTYPE.MULBLANK: // Skip blank cells break; case BIFFRECORDTYPE.FORMULA: case BIFFRECORDTYPE.FORMULA_OLD: object _oValue = ((XlsBiffFormulaCell)cell).Value; if (null != _oValue && _oValue is FORMULAERROR) { _oValue = null; } else { m_cellsValues[cell.ColumnIndex] = !ConvertOaDate ? _oValue : tryConvertOADateTime(_oValue, (ushort)(cell.XFormat));//date time offset } break; default: break; } }
private void pushCellValue(XlsBiffBlankCell cell) { double _dValue; switch (cell.ID) { case BIFFRECORDTYPE.INTEGER: case BIFFRECORDTYPE.INTEGER_OLD: m_cellsValues[cell.ColumnIndex] = ((XlsBiffIntegerCell)cell).Value; break; case BIFFRECORDTYPE.NUMBER: case BIFFRECORDTYPE.NUMBER_OLD: _dValue = ((XlsBiffNumberCell)cell).Value; m_cellsValues[cell.ColumnIndex] = !m_ConvertOADate ? _dValue : tryConvertOADateTime(_dValue, cell.XFormat); break; case BIFFRECORDTYPE.LABEL: case BIFFRECORDTYPE.LABEL_OLD: case BIFFRECORDTYPE.RSTRING: m_cellsValues[cell.ColumnIndex] = ((XlsBiffLabelCell)cell).Value; break; case BIFFRECORDTYPE.LABELSST: string tmp = m_globals.SST.GetString(((XlsBiffLabelSSTCell)cell).SSTIndex); m_cellsValues[cell.ColumnIndex] = tmp; break; case BIFFRECORDTYPE.RK: _dValue = ((XlsBiffRKCell)cell).Value; m_cellsValues[cell.ColumnIndex] = !m_ConvertOADate ? _dValue : tryConvertOADateTime(_dValue, cell.XFormat); break; case BIFFRECORDTYPE.MULRK: XlsBiffMulRKCell _rkCell = (XlsBiffMulRKCell)cell; for (ushort j = cell.ColumnIndex; j <= _rkCell.LastColumnIndex; j++) { m_cellsValues[j] = _rkCell.GetValue(j); } break; case BIFFRECORDTYPE.BLANK: case BIFFRECORDTYPE.BLANK_OLD: case BIFFRECORDTYPE.MULBLANK: // Skip blank cells break; case BIFFRECORDTYPE.FORMULA: case BIFFRECORDTYPE.FORMULA_OLD: object _oValue = ((XlsBiffFormulaCell)cell).Value; if (null != _oValue && _oValue is FORMULAERROR) { _oValue = null; } else { m_cellsValues[cell.ColumnIndex] = !m_ConvertOADate ? _oValue : tryConvertOADateTime(_oValue, (ushort)(cell.XFormat + 75));//date time offset } break; default: break; } }
/// <summary> /// Reads additional records if needed: a string record might follow a formula result /// </summary> private Cell ReadSingleCell(XlsBiffStream biffStream, XlsBiffBlankCell cell, int xfIndex) { LogManager.Log(this).Debug("ReadSingleCell {0}", cell.Id); var effectiveStyle = Workbook.GetEffectiveCellStyle(xfIndex, cell.Format); var numberFormatIndex = effectiveStyle.NumberFormatIndex; object value = null; CellError?error = null; switch (cell.Id) { case BIFFRECORDTYPE.BOOLERR: if (cell.ReadByte(7) == 0) { value = cell.ReadByte(6) != 0; } else { error = (CellError)cell.ReadByte(6); } break; case BIFFRECORDTYPE.BOOLERR_OLD: if (cell.ReadByte(8) == 0) { value = cell.ReadByte(7) != 0; } else { error = (CellError)cell.ReadByte(7); } break; case BIFFRECORDTYPE.INTEGER: case BIFFRECORDTYPE.INTEGER_OLD: value = TryConvertOADateTime(((XlsBiffIntegerCell)cell).Value, numberFormatIndex); break; case BIFFRECORDTYPE.NUMBER: case BIFFRECORDTYPE.NUMBER_OLD: value = TryConvertOADateTime(((XlsBiffNumberCell)cell).Value, numberFormatIndex); break; case BIFFRECORDTYPE.LABEL: case BIFFRECORDTYPE.LABEL_OLD: case BIFFRECORDTYPE.RSTRING: value = GetLabelString((XlsBiffLabelCell)cell, effectiveStyle); break; case BIFFRECORDTYPE.LABELSST: value = Workbook.SST.GetString(((XlsBiffLabelSSTCell)cell).SSTIndex, Encoding); break; case BIFFRECORDTYPE.RK: value = TryConvertOADateTime(((XlsBiffRKCell)cell).Value, numberFormatIndex); break; case BIFFRECORDTYPE.BLANK: case BIFFRECORDTYPE.BLANK_OLD: case BIFFRECORDTYPE.MULBLANK: // Skip blank cells break; case BIFFRECORDTYPE.FORMULA: case BIFFRECORDTYPE.FORMULA_V3: case BIFFRECORDTYPE.FORMULA_V4: value = TryGetFormulaValue(biffStream, (XlsBiffFormulaCell)cell, effectiveStyle, out error); break; } return(new Cell(cell.ColumnIndex, value, effectiveStyle, error)); }