private static object ReadAConstantValue(RecordInputStream in1) { byte grbit = (byte)in1.ReadByte(); switch (grbit) { case TYPE_EMPTY: in1.ReadLong(); // 8 byte 'not used' field return EMPTY_REPRESENTATION; case TYPE_NUMBER: return in1.ReadDouble(); case TYPE_STRING: return in1.ReadUnicodeString(); case TYPE_bool: return ReadBoolean(in1); case TYPE_ERROR_CODE: int errCode = in1.ReadUShort(); // next 6 bytes are Unused in1.ReadUShort(); in1.ReadInt(); return ErrorConstant.ValueOf(errCode); } throw new Exception("Unknown grbit value (" + grbit + ")"); }
/** * Constructs a Extern Sheet record and Sets its fields appropriately. * * @param id id must be 0x16 or an exception will be throw upon validation * @param size the size of the data area of the record * @param data data of the record (should not contain sid/len) */ public SupBookRecord(RecordInputStream in1) { field_1_number_of_sheets = in1.ReadShort(); if (in1.CurrentLength > SMALL_RECORD_SIZE) { // 5.38.1 External References _isAddInFunctions = false; field_2_encoded_url = in1.ReadUnicodeString(); UnicodeString[] sheetNames = new UnicodeString[field_1_number_of_sheets]; for (int i = 0; i < sheetNames.Length; i++) { sheetNames[i] = in1.ReadUnicodeString(); } field_3_sheet_names = sheetNames; return; } // else not 'External References' field_2_encoded_url = null; field_3_sheet_names = null; short nextShort = in1.ReadShort(); if (nextShort == TAG_INTERNAL_REFERENCES) { // 5.38.2 'Internal References' _isAddInFunctions = false; } else if (nextShort == TAG_Add_IN_FUNCTIONS) { // 5.38.3 'Add-In Functions' _isAddInFunctions = true; if (field_1_number_of_sheets != 1) { throw new Exception("Expected 0x0001 for number of sheets field in 'Add-In Functions' but got (" + field_1_number_of_sheets + ")"); } } else { throw new Exception("invalid EXTERNALBOOK code (" + StringUtil.ToHexString(nextShort) + ")"); } }