コード例 #1
0
		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;
			}
		}
コード例 #2
0
		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;
			}
		}
コード例 #3
0
ファイル: XlsWorksheet.cs プロジェクト: east-eden/excel
        /// <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));
        }