public String ResolveNameXText(int refIndex, int definedNameIndex, InternalWorkbook workbook) { int extBookIndex = _externSheetRecord.GetExtbookIndexFromRefIndex(refIndex); int firstTabIndex = _externSheetRecord.GetFirstSheetIndexFromRefIndex(refIndex); if (firstTabIndex == -1) { // The referenced sheet could not be found throw new RuntimeException("Referenced sheet could not be found"); } // Does it exist via the external book block? ExternalBookBlock externalBook = _externalBookBlocks[extBookIndex]; if (externalBook._externalNameRecords.Length > definedNameIndex) { return _externalBookBlocks[extBookIndex].GetNameText(definedNameIndex); } else if (firstTabIndex == -2) { // Workbook scoped name, not actually external after all NameRecord nr = GetNameRecord(definedNameIndex); int sheetNumber = nr.SheetNumber; StringBuilder text = new StringBuilder(); if (sheetNumber > 0) { String sheetName = workbook.GetSheetName(sheetNumber - 1); SheetNameFormatter.AppendFormat(text, sheetName); text.Append("!"); } text.Append(nr.NameText); return text.ToString(); } else { throw new IndexOutOfRangeException( "Ext Book Index relative but beyond the supported length, was " + extBookIndex + " but maximum is " + _externalBookBlocks.Length ); } }