Esempio n. 1
0
        public ExternalSheet GetExternalSheet(String firstSheetName, String lastSheetName, int externalWorkbookNumber)
        {
            String workbookName;

            if (externalWorkbookNumber > 0)
            {
                // External reference - reference is 1 based, link table is 0 based
                int linkNumber = externalWorkbookNumber - 1;
                ExternalLinksTable linkTable = _uBook.ExternalLinksTable[(linkNumber)];
                workbookName = linkTable.LinkedFileName;
            }
            else
            {
                // Internal reference
                workbookName = null;
            }

            if (lastSheetName == null || firstSheetName.Equals(lastSheetName))
            {
                return(new ExternalSheet(workbookName, firstSheetName));
            }
            else
            {
                return(new ExternalSheetRange(workbookName, firstSheetName, lastSheetName));
            }
        }
Esempio n. 2
0
        public ExternalName GetExternalName(String nameName, String sheetName, int externalWorkbookNumber)
        {
            if (externalWorkbookNumber > 0)
            {
                // External reference - reference is 1 based, link table is 0 based
                int linkNumber = externalWorkbookNumber - 1;
                ExternalLinksTable linkTable = _uBook.ExternalLinksTable[(linkNumber)];

                foreach (IName name in linkTable.DefinedNames)
                {
                    if (name.NameName.Equals(nameName))
                    {
                        // HSSF returns one sheet higher than normal, and various bits
                        //  of the code assume that. So, make us match that behaviour!
                        int nameSheetIndex = name.SheetIndex + 1;

                        // TODO Return a more specialised form of this, see bug #56752
                        // Should include the cached values, for in case that book isn't available
                        // Should support XSSF stuff Lookups
                        return(new ExternalName(nameName, -1, nameSheetIndex));
                    }
                }
                throw new ArgumentException("Name '" + nameName + "' not found in " +
                                            "reference to " + linkTable.LinkedFileName);
            }
            else
            {
                // Internal reference
                int nameIdx = _uBook.GetNameIndex(nameName);
                return(new ExternalName(nameName, nameIdx, 0));  // TODO Is this right?
            }
        }
Esempio n. 3
0
        public void BasicRead()
        {
            XSSFWorkbook wb = XSSFTestDataSamples.OpenSampleWorkbook("ref-56737.xlsx");

            Assert.IsNotNull(wb.ExternalLinksTable);
            IName name = null;

            Assert.AreEqual(1, wb.ExternalLinksTable.Count);

            ExternalLinksTable links = wb.ExternalLinksTable[0];

            Assert.AreEqual(3, links.SheetNames.Count);
            Assert.AreEqual(2, links.DefinedNames.Count);

            Assert.AreEqual("Uses", links.SheetNames[(0)]);
            Assert.AreEqual("Defines", links.SheetNames[(1)]);
            Assert.AreEqual("56737", links.SheetNames[(2)]);

            name = links.DefinedNames[(0)];
            Assert.AreEqual("NR_Global_B2", name.NameName);
            Assert.AreEqual(-1, name.SheetIndex);
            Assert.AreEqual(null, name.SheetName);
            Assert.AreEqual("'Defines'!$B$2", name.RefersToFormula);

            name = links.DefinedNames[(1)];
            Assert.AreEqual("NR_To_A1", name.NameName);
            Assert.AreEqual(1, name.SheetIndex);
            Assert.AreEqual("Defines", name.SheetName);
            Assert.AreEqual("'Defines'!$A$1", name.RefersToFormula);

            Assert.AreEqual("56737.xlsx", links.LinkedFileName);
        }
Esempio n. 4
0
        public void readWithReferencesToTwoExternalBooks()
        {
            XSSFWorkbook wb = XSSFTestDataSamples.OpenSampleWorkbook("ref2-56737.xlsx");

            Assert.IsNotNull(wb.ExternalLinksTable);
            IName name = null;

            Assert.AreEqual(2, wb.ExternalLinksTable.Count);

            // Check the first one, links to 56737.xlsx
            ExternalLinksTable links = wb.ExternalLinksTable[0];

            Assert.AreEqual("56737.xlsx", links.LinkedFileName);
            Assert.AreEqual(3, links.SheetNames.Count);
            Assert.AreEqual(2, links.DefinedNames.Count);

            Assert.AreEqual("Uses", links.SheetNames[0]);
            Assert.AreEqual("Defines", links.SheetNames[1]);
            Assert.AreEqual("56737", links.SheetNames[2]);

            name = links.DefinedNames[0];
            Assert.AreEqual("NR_Global_B2", name.NameName);
            Assert.AreEqual(-1, name.SheetIndex);
            Assert.AreEqual(null, name.SheetName);
            Assert.AreEqual("'Defines'!$B$2", name.RefersToFormula);

            name = links.DefinedNames[1];
            Assert.AreEqual("NR_To_A1", name.NameName);
            Assert.AreEqual(1, name.SheetIndex);
            Assert.AreEqual("Defines", name.SheetName);
            Assert.AreEqual("'Defines'!$A$1", name.RefersToFormula);


            // Check the second one, links to 56737.xls, slightly differently
            links = wb.ExternalLinksTable[1];
            Assert.AreEqual("56737.xls", links.LinkedFileName);
            Assert.AreEqual(2, links.SheetNames.Count);
            Assert.AreEqual(2, links.DefinedNames.Count);

            Assert.AreEqual("Uses", links.SheetNames[0]);
            Assert.AreEqual("Defines", links.SheetNames[1]);

            name = links.DefinedNames[0];
            Assert.AreEqual("NR_Global_B2", name.NameName);
            Assert.AreEqual(-1, name.SheetIndex);
            Assert.AreEqual(null, name.SheetName);
            Assert.AreEqual("'Defines'!$B$2", name.RefersToFormula);

            name = links.DefinedNames[1];
            Assert.AreEqual("NR_To_A1", name.NameName);
            Assert.AreEqual(1, name.SheetIndex);
            Assert.AreEqual("Defines", name.SheetName);
            Assert.AreEqual("'Defines'!$A$1", name.RefersToFormula);
        }
Esempio n. 5
0
        public void BasicReadWriteRead()
        {
            XSSFWorkbook wb   = XSSFTestDataSamples.OpenSampleWorkbook("ref-56737.xlsx");
            IName        name = wb.ExternalLinksTable[0].DefinedNames[(1)];

            name.NameName        = (/*setter*/ "Testing");
            name.RefersToFormula = (/*setter*/ "$A$1");

            wb = XSSFTestDataSamples.WriteOutAndReadBack(wb) as XSSFWorkbook;
            Assert.AreEqual(1, wb.ExternalLinksTable.Count);
            ExternalLinksTable links = wb.ExternalLinksTable[(0)];

            name = links.DefinedNames[(0)];
            Assert.AreEqual("NR_Global_B2", name.NameName);
            Assert.AreEqual(-1, name.SheetIndex);
            Assert.AreEqual(null, name.SheetName);
            Assert.AreEqual("'Defines'!$B$2", name.RefersToFormula);

            name = links.DefinedNames[(1)];
            Assert.AreEqual("Testing", name.NameName);
            Assert.AreEqual(1, name.SheetIndex);
            Assert.AreEqual("Defines", name.SheetName);
            Assert.AreEqual("$A$1", name.RefersToFormula);
        }