/** * 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) { int recLen = in1.Remaining; field_1_number_of_sheets = in1.ReadShort(); if (recLen > SMALL_RECORD_SIZE) { // 5.38.1 External References _isAddInFunctions = false; field_2_encoded_url = in1.ReadString(); String[] sheetNames = new String[field_1_number_of_sheets]; for (int i = 0; i < sheetNames.Length; i++) { sheetNames[i] = in1.ReadString(); } 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) + ")"); } }