Exemple #1
0
        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
                );
            }
        }