示例#1
0
        public void TestBSEPictureRef()
        {
            HSSFWorkbook wb = new HSSFWorkbook();

            HSSFSheet        sh     = wb.CreateSheet("Pictures") as HSSFSheet;
            HSSFPatriarch    dr     = sh.CreateDrawingPatriarch() as HSSFPatriarch;
            HSSFClientAnchor anchor = new HSSFClientAnchor();

            InternalSheet ish = HSSFTestHelper.GetSheetForTest(sh);

            //register a picture
            byte[] data1 = new byte[] { 1, 2, 3 };
            int    idx1  = wb.AddPicture(data1, PictureType.JPEG);

            Assert.AreEqual(1, idx1);
            HSSFPicture p1 = dr.CreatePicture(anchor, idx1) as HSSFPicture;

            EscherBSERecord bse = wb.Workbook.GetBSERecord(idx1);

            Assert.AreEqual(bse.Ref, 1);
            dr.CreatePicture(new HSSFClientAnchor(), idx1);
            Assert.AreEqual(bse.Ref, 2);

            HSSFShapeGroup gr = dr.CreateGroup(new HSSFClientAnchor());

            gr.CreatePicture(new HSSFChildAnchor(), idx1);
            Assert.AreEqual(bse.Ref, 3);
        }
示例#2
0
        public void TestBOFandEOFRecords()
        {
            HSSFWorkbook workbook = HSSFTestDataSamples.OpenSampleWorkbook("SimpleChart.xls");

            NPOI.SS.UserModel.ISheet sheet = workbook.GetSheetAt(0);
            IRow  firstRow  = sheet.GetRow(0);
            ICell firstCell = firstRow.GetCell(0);

            //System.out.println("first assertion for date");
            Assert.AreEqual(new DateTime(2000, 1, 1, 10, 51, 2),
                            DateUtil.GetJavaDate(firstCell.NumericCellValue, false));
            IRow  row  = sheet.CreateRow(15);
            ICell cell = row.CreateCell(1);

            cell.SetCellValue(22);
            InternalSheet      newSheet = ((HSSFSheet)workbook.GetSheetAt(0)).Sheet;
            IList <RecordBase> records  = newSheet.Records;

            //System.out.println("BOF Assertion");
            Assert.IsTrue(records[0] is BOFRecord);
            //System.out.println("EOF Assertion");
            Assert.IsTrue(records[records.Count - 1] is EOFRecord);

            workbook.Close();
        }
示例#3
0
        public void TestRowValueAggregatesOrder_bug45145()
        {
            InternalSheet sheet = InternalSheet.CreateSheet();

            RowRecord rr = new RowRecord(5);

            sheet.AddRow(rr);

            CellValueRecordInterface cvr = new BlankRecord();

            cvr.Column = 0;
            cvr.Row    = (5);
            sheet.AddValueRecord(5, cvr);


            int dbCellRecordPos = GetDbCellRecordPos(sheet);

            if (dbCellRecordPos == 252)
            {
                // The overt symptom of the bug
                // DBCELL record pos is1 calculated wrong if VRA comes before RRA
                throw new AssertionException("Identified  bug 45145");
            }

            Assert.AreEqual(242, dbCellRecordPos);
        }
示例#4
0
        public void TestActiveCell()
        {
            //read in sample
            HSSFWorkbook book = OpenSample("Simple.xls");

            //Check initial position
            HSSFSheet     umSheet = (HSSFSheet)book.GetSheetAt(0);
            InternalSheet s       = umSheet.Sheet;

            Assert.AreEqual(0, s.ActiveCellCol, "Initial active cell should be in col 0");
            Assert.AreEqual(1, s.ActiveCellRow, "Initial active cell should be on row 1");

            //modify position through Cell
            ICell cell = umSheet.CreateRow(3).CreateCell(2);

            cell.SetAsActiveCell();
            Assert.AreEqual(2, s.ActiveCellCol, "After modify, active cell should be in col 2");
            Assert.AreEqual(3, s.ActiveCellRow, "After modify, active cell should be on row 3");

            //Write book to temp file; read and Verify that position is serialized
            book = WriteOutAndReadBack(book);

            umSheet = (HSSFSheet)book.GetSheetAt(0);
            s       = umSheet.Sheet;

            Assert.AreEqual(2, s.ActiveCellCol, "After serialize, active cell should be in col 2");
            Assert.AreEqual(3, s.ActiveCellRow, "After serialize, active cell should be on row 3");
        }
示例#5
0
        public void TestGetCellWidth()
        {
            InternalSheet    sheet = InternalSheet.CreateSheet();
            ColumnInfoRecord nci   = new ColumnInfoRecord();

            // Prepare test model
            nci.FirstColumn = 5;
            nci.LastColumn  = 10;
            nci.ColumnWidth = 100;


            sheet._columnInfos.InsertColumn(nci);

            Assert.AreEqual(100, sheet.GetColumnWidth(5));
            Assert.AreEqual(100, sheet.GetColumnWidth(6));
            Assert.AreEqual(100, sheet.GetColumnWidth(7));
            Assert.AreEqual(100, sheet.GetColumnWidth(8));
            Assert.AreEqual(100, sheet.GetColumnWidth(9));
            Assert.AreEqual(100, sheet.GetColumnWidth(10));

            sheet.SetColumnWidth(6, 200);

            Assert.AreEqual(100, sheet.GetColumnWidth(5));
            Assert.AreEqual(200, sheet.GetColumnWidth(6));
            Assert.AreEqual(100, sheet.GetColumnWidth(7));
            Assert.AreEqual(100, sheet.GetColumnWidth(8));
            Assert.AreEqual(100, sheet.GetColumnWidth(9));
            Assert.AreEqual(100, sheet.GetColumnWidth(10));
        }
示例#6
0
        public void TestMovingMergedRegion()
        {
            List <Record> records = new List <Record>();

            CellRangeAddress[] cras =
            {
                new CellRangeAddress(0, 1, 0, 2),
            };
            MergeCellsRecord merged = new MergeCellsRecord(cras, 0, cras.Length);

            records.Add(BOFRecord.CreateSheetBOF());
            records.Add(new DimensionsRecord());
            records.Add(new RowRecord(0));
            records.Add(new RowRecord(1));
            records.Add(new RowRecord(2));
            records.Add(CreateWindow2Record());
            records.Add(EOFRecord.instance);
            records.Add(merged);

            InternalSheet sheet = CreateSheet(records);

            sheet.Records.RemoveAt(0);

            //stub object to throw off list INDEX operations
            sheet.RemoveMergedRegion(0);
            Assert.AreEqual(0, sheet.NumMergedRegions, "Should be no more merged regions");
        }
示例#7
0
        public void TestCloneMulBlank_bug46776()
        {
            Record[] recs =
            {
                InternalSheet.CreateBOF(),
                new DimensionsRecord(),
                new RowRecord(1),
                new MulBlankRecord(1, 3, new short[] { 0x0F, 0x0F, 0x0F, }),
                new RowRecord(2),
                CreateWindow2Record(),
                EOFRecord.instance,
            };

            InternalSheet sheet = CreateSheet(recs.ToList());

            InternalSheet sheet2;

            try
            {
                sheet2 = sheet.CloneSheet();
            }
            catch (Exception e)
            {
                if (e.Message.Equals("The class org.apache.poi.hssf.record.MulBlankRecord needs to define a clone method"))
                {
                    throw new AssertionException("Identified bug 46776");
                }
                throw e;
            }

            TestCases.HSSF.UserModel.RecordInspector.RecordCollector rc = new TestCases.HSSF.UserModel.RecordInspector.RecordCollector();
            sheet2.VisitContainedRecords(rc, 0);
            Record[] clonedRecs = rc.Records;
            Assert.AreEqual(recs.Length + 2, clonedRecs.Length); // +2 for INDEX and DBCELL
        }
示例#8
0
        public void TestAutoFilter()
        {
            HSSFWorkbook     wb  = new HSSFWorkbook();
            HSSFSheet        sh  = (HSSFSheet)wb.CreateSheet();
            InternalWorkbook iwb = wb.Workbook;
            InternalSheet    ish = sh.Sheet;

            Assert.IsNull(iwb.GetSpecificBuiltinRecord(NameRecord.BUILTIN_FILTER_DB, 1));
            Assert.IsNull(ish.FindFirstRecordBySid(AutoFilterInfoRecord.sid));

            CellRangeAddress range = CellRangeAddress.ValueOf("A1:B10");

            sh.SetAutoFilter(range);

            NameRecord name = iwb.GetSpecificBuiltinRecord(NameRecord.BUILTIN_FILTER_DB, 1);

            Assert.IsNotNull(name);

            // The built-in name for auto-filter must consist of a single Area3d Ptg.
            Ptg[] ptg = name.NameDefinition;
            Assert.AreEqual(1, ptg.Length, "The built-in name for auto-filter must consist of a single Area3d Ptg");
            Assert.IsTrue(ptg[0] is Area3DPtg, "The built-in name for auto-filter must consist of a single Area3d Ptg");

            Area3DPtg aref = (Area3DPtg)ptg[0];

            Assert.AreEqual(range.FirstColumn, aref.FirstColumn);
            Assert.AreEqual(range.FirstRow, aref.FirstRow);
            Assert.AreEqual(range.LastColumn, aref.LastColumn);
            Assert.AreEqual(range.LastRow, aref.LastRow);

            // verify  AutoFilterInfoRecord
            AutoFilterInfoRecord afilter = (AutoFilterInfoRecord)ish.FindFirstRecordBySid(AutoFilterInfoRecord.sid);

            Assert.IsNotNull(afilter);
            Assert.AreEqual(2, afilter.NumEntries); //filter covers two columns

            HSSFPatriarch dr = (HSSFPatriarch)sh.DrawingPatriarch;

            Assert.IsNotNull(dr);
            HSSFSimpleShape comboBoxShape = (HSSFSimpleShape)dr.Children[0];

            Assert.AreEqual(comboBoxShape.ShapeType, HSSFSimpleShape.OBJECT_TYPE_COMBO_BOX);

            Assert.IsNull(ish.FindFirstRecordBySid(ObjRecord.sid)); // ObjRecord will appear after serializetion

            wb  = HSSFTestDataSamples.WriteOutAndReadBack(wb);
            sh  = (HSSFSheet)wb.GetSheetAt(0);
            ish = sh.Sheet;
            ObjRecord objRecord  = (ObjRecord)ish.FindFirstRecordBySid(ObjRecord.sid);
            IList     subRecords = objRecord.SubRecords;

            Assert.AreEqual(3, subRecords.Count);
            Assert.IsTrue(subRecords[0] is CommonObjectDataSubRecord);
            Assert.IsTrue(subRecords[1] is FtCblsSubRecord); // must be present, see Bug 51481
            Assert.IsTrue(subRecords[2] is LbsDataSubRecord);
        }
示例#9
0
        private void CheckSheetRecords(InternalSheet sheet)
        {
            IList records = sheet.Records;

            Assert.IsTrue(records[0] is BOFRecord);
            Assert.IsTrue(records[records.Count - 1] is EOFRecord);

            CheckRecordOrder(records, sheetRecords);
            //        CheckRecordstogether(records, sheetRecords);
        }
示例#10
0
        /**
         * @return the value calculated for the position of the first DBCELL record for this sheet.
         * That value is1 found on the IndexRecord.
         */
        private static int GetDbCellRecordPos(InternalSheet sheet)
        {
            MyIndexRecordListener myIndexListener = new MyIndexRecordListener();

            sheet.VisitContainedRecords(myIndexListener, 0);
            IndexRecord indexRecord     = myIndexListener.GetIndexRecord();
            int         dbCellRecordPos = indexRecord.GetDbcellAt(0);

            return(dbCellRecordPos);
        }
示例#11
0
        public void TestHorizontallyCenter()
        {
            HSSFWorkbook  wb     = new HSSFWorkbook();
            HSSFSheet     s      = (HSSFSheet)wb.CreateSheet();
            InternalSheet sheet  = s.Sheet;
            HCenterRecord record = sheet.PageSettings.HCenter;

            Assert.AreEqual(false, record.HCenter);
            s.HorizontallyCenter = (true);
            Assert.AreEqual(true, record.HCenter);
        }
示例#12
0
        public void TestBackupRecord()
        {
            HSSFWorkbook  wb    = new HSSFWorkbook();
            HSSFSheet     s     = (HSSFSheet)wb.CreateSheet();
            InternalSheet sheet = s.Sheet;

            Assert.AreEqual(true, sheet.GridsetRecord.Gridset);
#pragma warning disable 0618         //  warning CS0618: 'NPOI.HSSF.UserModel.HSSFSheet.IsGridsPrinted' is obsolete: 'Please use IsPrintGridlines instead'
            s.IsGridsPrinted = true; // <- this is marked obsolete, but using "s.IsPrintGridlines = true;" makes this test fail 8-(
#pragma warning restore 0618
            Assert.AreEqual(false, sheet.GridsetRecord.Gridset);
        }
示例#13
0
        public void TestVerticallyCenter()
        {
            HSSFWorkbook  wb     = new HSSFWorkbook();
            HSSFSheet     s      = (HSSFSheet)wb.CreateSheet();
            InternalSheet sheet  = s.Sheet;
            VCenterRecord record = sheet.PageSettings.VCenter;

            Assert.AreEqual(false, record.VCenter);
            s.VerticallyCenter = (true);
            Assert.AreEqual(true, record.VCenter);

            // wb.Write(new FileOutputStream("c:\\Test.xls"));
        }
        static void AddToValidations(ICollection <DataValidation> validations, HSSFSheet sheet, string[] names)
        {
            InternalSheet internalSheet     = sheet.Sheet;
            var           dataValidityTable = (DataValidityTable)internalSheet.GetType()
                                              .GetField("_dataValidityTable", BindingFlags.NonPublic | BindingFlags.Instance)
                                              .GetValue(internalSheet);

            if (dataValidityTable == null)
            {
                return;
            }

            var validationList = (IList)dataValidityTable.GetType()
                                 .GetField("_validationList", BindingFlags.NonPublic | BindingFlags.Instance)
                                 .GetValue(dataValidityTable);

            foreach (DVRecord record in validationList)
            {
                var formula = (Formula)record.GetType()
                              .GetField("_formula1", BindingFlags.NonPublic | BindingFlags.Instance)
                              .GetValue(record);

                var validation = new DataValidation
                {
                    Range = ExcelHelper.ParseRange(record.CellRangeAddress.CellRangeAddresses[0].FormatAsString(), ExcelVersion.Xls)
                };

                Ptg ptg     = formula.Tokens[0];
                var namePtg = ptg as NamePtg;
                if (namePtg != null)
                {
                    validation.Type = DataValidationType.Formula;
                    validation.Name = names.ElementAt(namePtg.Index);
                }
                else
                {
                    var stringPtg = ptg as StringPtg;
                    if (stringPtg != null)
                    {
                        validation.Type = DataValidationType.List;
                        validation.List = stringPtg.Value.Split('\0');
                    }
                    else
                    {
                        continue;
                    }
                }

                validations.Add(validation);
            }
        }
示例#15
0
        public void TestBackupRecord()
        {
            HSSFWorkbook wb = new HSSFWorkbook();

            for (int i = 0; i < 10; i++)
            {
                HSSFSheet     s     = (HSSFSheet)wb.CreateSheet("Sheet " + i);
                InternalSheet sheet = s.Sheet;
            }

            wb.Workbook.SetSheetOrder("Sheet 6", 0);
            wb.Workbook.SetSheetOrder("Sheet 3", 7);
            wb.Workbook.SetSheetOrder("Sheet 1", 9);
        }
示例#16
0
        public void TestAddMergedRegion()
        {
            InternalSheet sheet        = InternalSheet.CreateSheet();
            int           regionsToAdd = 4096;
            int           startRecords = sheet.Records.Count;

            //simple Test that Adds a load of regions
            for (int n = 0; n < regionsToAdd; n++)
            {
                int index = sheet.AddMergedRegion(0, 0, 1, 1);
                Assert.AreEqual(index, n, "Merged region index expected to be " + n + " got " + index);
            }

            //test all the regions were indeed Added
            Assert.AreEqual(sheet.NumMergedRegions, regionsToAdd);

            //test that the regions were spread out over the appropriate number of records
            MergedCellListener mcListener = new MergedCellListener();

            sheet.VisitContainedRecords(mcListener, 0);
            int recordsAdded    = mcListener.Count;
            int recordsExpected = regionsToAdd / 1027;

            if ((regionsToAdd % 1027) != 0)
            {
                recordsExpected++;
            }
            Assert.AreEqual(recordsAdded, recordsExpected, "The " + regionsToAdd + " merged regions should have been spRead out over " + recordsExpected + " records, not " + recordsAdded);
            // Check we can't Add one with invalid date
            try
            {
                sheet.AddMergedRegion(10, 10, 9, 12);
                Assert.Fail("Expected an exception to occur");
            }
            catch (ArgumentException e)
            {
                // occurs during successful Test
                Assert.AreEqual("The 'to' row (9) must not be less than the 'from' row (10)", e.Message);
            }
            try
            {
                sheet.AddMergedRegion(10, 10, 12, 9);
                Assert.Fail("Expected an exception to occur");
            }
            catch (ArgumentException e)
            {
                // occurs during successful Test
                Assert.AreEqual("The 'to' col (9) must not be less than the 'from' col (10)", e.Message);
            }
        }
示例#17
0
        public void TestMaxColumnWidth()
        {
            InternalSheet sheet = InternalSheet.CreateSheet();

            sheet.SetColumnWidth(0, 255 * 256); //the limit
            try
            {
                sheet.SetColumnWidth(0, 256 * 256); //the limit
                Assert.Fail("expected exception");
            }
            catch (ArgumentException e)
            {
                Assert.AreEqual(e.Message, "The maximum column width for an individual cell is 255 characters.");
            }
        }
示例#18
0
        public void TestHeaderFooter_bug46840()
        {
            int          rowIx = 5;
            int          colIx = 6;
            NumberRecord nr    = new NumberRecord();

            nr.Row    = (rowIx);
            nr.Column = ((short)colIx);
            nr.Value  = (3.0);

            NPOI.HSSF.Record.Record[] recs =
            {
                BOFRecord.CreateSheetBOF(),
                new HeaderRecord("&LSales Figures"),
                new FooterRecord("&LJanuary"),
                new HeaderFooterRecord(HexRead.ReadFromString("9C 08 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 C4 60 00 00 00 00 00 00 00 00")),
                new DimensionsRecord(),
                new WindowTwoRecord(),
                new UserSViewBegin(HexRead.ReadFromString("ED 77 3B 86 BC 3F 37 4C A9 58 60 23 43 68 54 4B 01 00 00 00 64 00 00 00 40 00 00 00 02 00 00 00 3D 80 04 00 00 00 00 00 00 00 0C 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 F0 3F FF FF 01 00")),
                new HeaderRecord("&LSales Figures"),
                new FooterRecord("&LJanuary"),
                new HeaderFooterRecord(HexRead.ReadFromString("9C 08 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 C4 60 00 00 00 00 00 00 00 00")),
                new UserSViewEnd(HexRead.ReadFromString("01, 00")),

                EOFRecord.instance,
            };
            RecordStream  rs = new RecordStream(Arrays.AsList(recs), 0);
            InternalSheet sheet;

            try
            {
                sheet = InternalSheet.CreateSheet(rs);
            }
            catch (Exception e)
            {
                if (e.Message.Equals("two Page Settings Blocks found in the same sheet"))
                {
                    throw new AssertionException("Identified bug 46480");
                }
                throw e;
            }

            TestCases.HSSF.UserModel.RecordInspector.RecordCollector rv = new TestCases.HSSF.UserModel.RecordInspector.RecordCollector();
            sheet.VisitContainedRecords(rv, rowIx);
            NPOI.HSSF.Record.Record[] outRecs = rv.Records;
            Assert.AreEqual(13, outRecs.Length);
        }
示例#19
0
        public void TestWSBool()
        {
            HSSFWorkbook  wb     = new HSSFWorkbook();
            HSSFSheet     s      = (HSSFSheet)wb.CreateSheet();
            InternalSheet sheet  = s.Sheet;
            WSBoolRecord  record =
                (WSBoolRecord)sheet.FindFirstRecordBySid(WSBoolRecord.sid);

            // Check defaults
            Assert.AreEqual(false, record.AlternateExpression);
            Assert.AreEqual(false, record.AlternateFormula);
            Assert.AreEqual(false, record.Autobreaks);
            Assert.AreEqual(false, record.Dialog);
            Assert.AreEqual(false, record.DisplayGuts);
            Assert.AreEqual(true, record.FitToPage);
            Assert.AreEqual(false, record.RowSumsBelow);
            Assert.AreEqual(false, record.RowSumsRight);

            // Alter
            s.AlternativeExpression = (false);
            s.AlternativeFormula    = (false);
            s.Autobreaks            = true;
            s.Dialog       = true;
            s.DisplayGuts  = true;
            s.FitToPage    = false;
            s.RowSumsBelow = true;
            s.RowSumsRight = true;

            // Check
            Assert.AreEqual(false, record.AlternateExpression);
            Assert.AreEqual(false, record.AlternateFormula);
            Assert.AreEqual(true, record.Autobreaks);
            Assert.AreEqual(true, record.Dialog);
            Assert.AreEqual(true, record.DisplayGuts);
            Assert.AreEqual(false, record.FitToPage);
            Assert.AreEqual(true, record.RowSumsBelow);
            Assert.AreEqual(true, record.RowSumsRight);
            Assert.AreEqual(false, s.AlternativeExpression);
            Assert.AreEqual(false, s.AlternativeFormula);
            Assert.AreEqual(true, s.Autobreaks);
            Assert.AreEqual(true, s.Dialog);
            Assert.AreEqual(true, s.DisplayGuts);
            Assert.AreEqual(false, s.FitToPage);
            Assert.AreEqual(true, s.RowSumsBelow);
            Assert.AreEqual(true, s.RowSumsRight);
        }
示例#20
0
        public void TestUncalcSize_bug45066()
        {
            List <Record> records = new List <Record>();

            records.Add(BOFRecord.CreateSheetBOF());
            records.Add(new UncalcedRecord());
            records.Add(new DimensionsRecord());
            records.Add(CreateWindow2Record());
            records.Add(new EOFRecord());
            InternalSheet sheet = CreateSheet(records);

            // The original bug was due to different logic for collecting records for sizing and
            // serialization. The code has since been refactored into a single method for visiting
            // all contained records.  Now this Test is much less interesting
            SizeCheckingRecordVisitor scrv = new SizeCheckingRecordVisitor();

            sheet.VisitContainedRecords(scrv, 0);
            Assert.AreEqual(90, scrv.TotalSize);
        }
示例#21
0
        private void ConfirmAggregatedRecords(List <RecordBase> recordStream)
        {
            InternalSheet sheet = InternalSheet.CreateSheet();

            sheet.Records.Clear();
            ((List <RecordBase>)sheet.Records).AddRange(recordStream);

            IList sheetRecords = sheet.Records;

            DrawingManager2 drawingManager = new DrawingManager2(new EscherDggRecord());

            sheet.AggregateDrawingRecords(drawingManager, false);

            Assert.AreEqual(4, sheetRecords.Count);
            Assert.AreEqual(BOFRecord.sid, ((Record)sheetRecords[0]).Sid);
            Assert.AreEqual(EscherAggregate.sid, ((Record)sheetRecords[1]).Sid);
            Assert.AreEqual(WindowTwoRecord.sid, ((Record)sheetRecords[2]).Sid);
            Assert.AreEqual(EOFRecord.sid, ((Record)sheetRecords[3]).Sid);
        }
示例#22
0
        public void TestLateMargins_bug47199()
        {
            NPOI.HSSF.Record.Record[] recs =
            {
                BOFRecord.CreateSheetBOF(),
                new HeaderRecord("&LSales Figures"),
                new FooterRecord("&LJanuary"),
                new DimensionsRecord(),
                CreateBottomMargin(0.787F),
                new WindowTwoRecord(),
                EOFRecord.instance,
            };
            RecordStream rs = new RecordStream(Arrays.AsList(recs), 0);

            InternalSheet sheet;

            try
            {
                sheet = InternalSheet.CreateSheet(rs);
            }
            catch (Exception e)
            {
                if (e.Message.Equals("two Page Settings Blocks found in the same sheet"))
                {
                    throw new AssertionException("Identified bug 47199a - failed to process late margings records");
                }
                throw e;
            }

            TestCases.HSSF.UserModel.RecordInspector.RecordCollector rv = new TestCases.HSSF.UserModel.RecordInspector.RecordCollector();
            sheet.VisitContainedRecords(rv, 0);
            NPOI.HSSF.Record.Record[] outRecs = rv.Records;
            Assert.AreEqual(recs.Length + 1, outRecs.Length); // +1 for index record

            Assert.AreEqual(typeof(BOFRecord), outRecs[0].GetType());
            Assert.AreEqual(typeof(IndexRecord), outRecs[1].GetType());
            Assert.AreEqual(typeof(HeaderRecord), outRecs[2].GetType());
            Assert.AreEqual(typeof(FooterRecord), outRecs[3].GetType());
            Assert.AreEqual(typeof(DimensionsRecord), outRecs[5].GetType());
            Assert.AreEqual(typeof(WindowTwoRecord), outRecs[6].GetType());
            Assert.AreEqual(typeof(EOFRecord), outRecs[7].GetType());
        }
示例#23
0
        public void TestAddCondFormatAfterDataValidation_bug46547()
        {
            // Create a sheet with data validity (similar to bugzilla attachment id=23131).
            InternalSheet sheet = InternalSheet.CreateSheet();

            sheet.GetOrCreateDataValidityTable();

            ConditionalFormattingTable cft;

            // attempt to Add conditional formatting
            try
            {
                cft = sheet.ConditionalFormattingTable; // lazy getter
            }
            catch (InvalidCastException)
            {
                throw new AssertionException("Identified bug 46547b");
            }
            Assert.IsNotNull(cft);
        }
示例#24
0
        public void TestSheetSerializeSizeMisMatch_bug45066()
        {
            HSSFWorkbook  wb           = new HSSFWorkbook();
            InternalSheet sheet        = ((HSSFSheet)wb.CreateSheet("Sheet1")).Sheet;
            IList         sheetRecords = sheet.Records;

            // one way (of many) to cause the discrepancy is with a badly behaved record:
            sheetRecords.Add(new BadlyBehavedRecord());
            // There is also much logic inside Sheet that (if buggy) might also cause the discrepancy
            try
            {
                wb.GetBytes();
                throw new AssertionException("Identified bug 45066 a");
            }
            catch (InvalidOperationException e)
            {
                // Expected badly behaved sheet record to cause exception
                Assert.IsTrue(e.Message.StartsWith("Actual serialized sheet size"));
            }
        }
示例#25
0
        public void TestShiftFormulasAddCondFormat_bug46547()
        {
            // Create a sheet with data validity (similar to bugzilla attachment id=23131).
            InternalSheet sheet = InternalSheet.CreateSheet();

            IList sheetRecs = sheet.Records;

            //Assert.AreEqual(23, sheetRecs.Count);
            Assert.AreEqual(24, sheetRecs.Count); //for SheetExtRecord

            FormulaShifter shifter = FormulaShifter.CreateForRowShift(0, "", 0, 0, 1);

            sheet.UpdateFormulasAfterCellShift(shifter, 0);
            if (sheetRecs.Count == 25 && sheetRecs[22] is ConditionalFormattingTable)
            {
                throw new AssertionException("Identified bug 46547a");
            }
            //Assert.AreEqual(23, sheetRecs.Count);
            Assert.AreEqual(24, sheetRecs.Count); //for SheetExtRecord
        }
示例#26
0
        public void TestLateHeaderFooter_bug46953()
        {
            int          rowIx = 5;
            int          colIx = 6;
            NumberRecord nr    = new NumberRecord();

            nr.Row    = (rowIx);
            nr.Column = ((short)colIx);
            nr.Value  = (3.0);

            NPOI.HSSF.Record.Record[] recs =
            {
                BOFRecord.CreateSheetBOF(),
                new HeaderRecord("&LSales Figures"),
                new FooterRecord("&LJanuary"),
                new DimensionsRecord(),
                new WindowTwoRecord(),
                new HeaderFooterRecord(HexRead.ReadFromString("9C 08 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 C4 60 00 00 00 00 00 00 00 00")),
                EOFRecord.instance,
            };
            RecordStream  rs    = new RecordStream(Arrays.AsList(recs), 0);
            InternalSheet sheet = InternalSheet.CreateSheet(rs);

            RecordInspector.RecordCollector rv = new RecordInspector.RecordCollector();
            sheet.VisitContainedRecords(rv, 0);
            NPOI.HSSF.Record.Record[] outRecs = rv.Records;
            if (outRecs[4] == EOFRecord.instance)
            {
                throw new AssertionException("Identified bug 46953 - EOF incorrectly Appended to PSB");
            }
            Assert.AreEqual(recs.Length + 1, outRecs.Length); // +1 for index record

            Assert.AreEqual(typeof(BOFRecord), outRecs[0].GetType());
            Assert.AreEqual(typeof(IndexRecord), outRecs[1].GetType());
            Assert.AreEqual(typeof(HeaderRecord), outRecs[2].GetType());
            Assert.AreEqual(typeof(FooterRecord), outRecs[3].GetType());
            Assert.AreEqual(typeof(HeaderFooterRecord), outRecs[4].GetType());
            Assert.AreEqual(typeof(DimensionsRecord), outRecs[5].GetType());
            Assert.AreEqual(typeof(WindowTwoRecord), outRecs[6].GetType());
            Assert.AreEqual(typeof(EOFRecord), outRecs[7].GetType());
        }
示例#27
0
        public void TestSheetDimensions()
        {
            InternalSheet    sheet      = InternalSheet.CreateSheet();
            DimensionsRecord dimensions = (DimensionsRecord)sheet.FindFirstRecordBySid(DimensionsRecord.sid);

            Assert.AreEqual(0, dimensions.FirstCol);
            Assert.AreEqual(0, dimensions.FirstRow);
            Assert.AreEqual(1, dimensions.LastCol);  // plus pne
            Assert.AreEqual(1, dimensions.LastRow);  // plus pne

            RowRecord rr = new RowRecord(0);

            sheet.AddRow(rr);

            Assert.AreEqual(0, dimensions.FirstCol);
            Assert.AreEqual(0, dimensions.FirstRow);
            Assert.AreEqual(1, dimensions.LastCol);
            Assert.AreEqual(1, dimensions.LastRow);

            CellValueRecordInterface cvr;

            cvr        = new BlankRecord();
            cvr.Column = ((short)0);
            cvr.Row    = (0);
            sheet.AddValueRecord(0, cvr);

            Assert.AreEqual(0, dimensions.FirstCol);
            Assert.AreEqual(0, dimensions.FirstRow);
            Assert.AreEqual(1, dimensions.LastCol);
            Assert.AreEqual(1, dimensions.LastRow);

            cvr        = new BlankRecord();
            cvr.Column = ((short)1);
            cvr.Row    = (0);
            sheet.AddValueRecord(0, cvr);

            Assert.AreEqual(0, dimensions.FirstCol);
            Assert.AreEqual(0, dimensions.FirstRow);
            Assert.AreEqual(2, dimensions.LastCol);   //YK:  failed until Bugzilla 53414 was fixed
            Assert.AreEqual(1, dimensions.LastRow);
        }
示例#28
0
        public void TestRowAggregation()
        {
            List <Record> records = new List <Record>();

            records.Add(InternalSheet.CreateBOF());
            records.Add(new DimensionsRecord());
            records.Add(new RowRecord(0));
            records.Add(new RowRecord(1));
            FormulaRecord formulaRecord = new FormulaRecord();

            formulaRecord.SetCachedResultTypeString();
            records.Add(formulaRecord);
            records.Add(new StringRecord());
            records.Add(new RowRecord(2));
            records.Add(CreateWindow2Record());
            records.Add(EOFRecord.instance);

            InternalSheet sheet = CreateSheet(records);

            Assert.IsNotNull(sheet.GetRow(2), "Row [2] was skipped");
        }
示例#29
0
        public void TestCreateSheet()
        {
            // Check we're Adding row and cell aggregates
            List <Record> records = new List <Record>();

            records.Add(BOFRecord.CreateSheetBOF());
            records.Add(new DimensionsRecord());
            records.Add(CreateWindow2Record());
            records.Add(new EOFRecord());
            InternalSheet sheet = CreateSheet(records);

            Record[] outRecs = GetSheetRecords(sheet, 0);

            int pos = 0;

            Assert.IsTrue(outRecs[pos++] is BOFRecord);
            Assert.IsTrue(outRecs[pos++] is IndexRecord);
            Assert.IsTrue(outRecs[pos++] is DimensionsRecord);
            Assert.IsTrue(outRecs[pos++] is WindowTwoRecord);
            Assert.IsTrue(outRecs[pos++] is EOFRecord);
        }
示例#30
0
        public void TestDgContainerMustBeRootOfHSSFSheetEscherRecords()
        {
            HSSFWorkbook      wb      = HSSFTestDataSamples.OpenSampleWorkbook("47251.xls");
            HSSFSheet         sh      = wb.GetSheetAt(0) as HSSFSheet;
            InternalSheet     ish     = HSSFTestHelper.GetSheetForTest(sh);
            List <RecordBase> records = ish.Records;
            // records to be aggregated
            List <RecordBase> dgRecords = records.GetRange(19, 23 - 19);

            byte[]          dgBytes = toByteArray(dgRecords);
            IDrawing        d       = sh.DrawingPatriarch;
            EscherAggregate agg     = (EscherAggregate)ish.FindFirstRecordBySid(EscherAggregate.sid);

            Assert.AreEqual(true, agg.EscherRecords[0] is EscherContainerRecord);
            Assert.AreEqual(EscherContainerRecord.DG_CONTAINER, agg.EscherRecords[0].RecordId);
            Assert.AreEqual((short)0x0, agg.EscherRecords[0].Options);
            agg = (EscherAggregate)ish.FindFirstRecordBySid(EscherAggregate.sid);
            byte[] dgBytesAfterSave = agg.Serialize();
            Assert.AreEqual(dgBytes.Length, dgBytesAfterSave.Length, "different size of drawing data before and after save");
            Assert.IsTrue(Arrays.Equals(dgBytes, dgBytesAfterSave), "drawing data before and after save is different");
        }