Esempio n. 1
0
        public void TestZipBombNotTriggeredOnUselessContent()
        {
            SXSSFWorkbook swb = new SXSSFWorkbook(null, 1, true, true);
            SXSSFSheet    s   = swb.CreateSheet() as SXSSFSheet;

            char[] useless = new char[32767];
            Arrays.Fill(useless, ' ');

            for (int row = 0; row < 1; row++)
            {
                IRow r = s.CreateRow(row);
                for (int col = 0; col < 10; col++)
                {
                    char[] prefix = HexDump.ToHex(row * 1000 + col).ToCharArray();
                    Arrays.Fill(useless, 0, 10, ' ');
                    Array.Copy(prefix, 0, useless, 0, prefix.Length);
                    String ul = new String(useless);
                    r.CreateCell(col, CellType.String).SetCellValue(ul);
                    ul = null;
                }
            }

            ByteArrayOutputStream bos = new ByteArrayOutputStream();

            swb.Write(bos);
            swb.Dispose();
            swb.Close();
        }
Esempio n. 2
0
        public void TestEvaluateRefOutsideWindowFails()
        {
            SXSSFWorkbook wb = new SXSSFWorkbook(5);
            SXSSFSheet    s  = wb.CreateSheet() as SXSSFSheet;

            s.CreateRow(0).CreateCell(0).CellFormula = (/*setter*/ "1+2");
            Assert.AreEqual(false, s.AllRowsFlushed);
            Assert.AreEqual(-1, s.LastFlushedRowNum);

            for (int i = 1; i <= 19; i++)
            {
                s.CreateRow(i);
            }
            ICell c = s.CreateRow(20).CreateCell(0);

            c.CellFormula = (/*setter*/ "A1+100");

            Assert.AreEqual(false, s.AllRowsFlushed);
            Assert.AreEqual(15, s.LastFlushedRowNum);

            IFormulaEvaluator eval = wb.GetCreationHelper().CreateFormulaEvaluator();

            try
            {
                eval.EvaluateFormulaCell(c);
                Assert.Fail("Evaluate shouldn't work, as reference outside the window");
            }
            catch (RowFlushedException)
            {
                // Expected
            }

            wb.Close();
        }
Esempio n. 3
0
 private XSSFSheet GetXSSFSheet(SXSSFSheet sheet)
 {
     if (sheet != null && _sxFromXHash.ContainsKey(sheet))
     {
         return(_sxFromXHash[sheet]);
     }
     else
     {
         return(null);
     }
 }
Esempio n. 4
0
        public void Test_EmptySheet_NoException()
        {
            workbook = new SXSSFWorkbook();
            sheet    = workbook.CreateSheet() as SXSSFSheet;
            sheet.TrackAllColumnsForAutoSizing();

            for (int i = 0; i < 10; i++)
            {
                sheet.AutoSizeColumn(i, useMergedCells);
            }
        }
Esempio n. 5
0
        public void TestEvaluateAllFails()
        {
            SXSSFWorkbook wb = new SXSSFWorkbook(5);
            SXSSFSheet    s  = wb.CreateSheet() as SXSSFSheet;

            IFormulaEvaluator eval = wb.GetCreationHelper().CreateFormulaEvaluator();

            s.CreateRow(0).CreateCell(0).CellFormula = (/*setter*/ "1+2");
            s.CreateRow(1).CreateCell(0).CellFormula = (/*setter*/ "A21");
            for (int i = 2; i < 19; i++)
            {
                s.CreateRow(i);
            }

            // Cells outside window will fail, whether referenced or not
            s.CreateRow(19).CreateCell(0).CellFormula = (/*setter*/ "A1+A2");
            s.CreateRow(20).CreateCell(0).CellFormula = (/*setter*/ "A1+A11+100");
            try
            {
                eval.EvaluateAll();
                Assert.Fail("Evaluate All shouldn't work, as some cells outside the window");
            }
            catch (RowFlushedException)
            {
                // Expected
            }


            // Inactive sheets will fail
            XSSFWorkbook xwb = new XSSFWorkbook();

            xwb.CreateSheet("Open");
            xwb.CreateSheet("Closed");

            wb.Close();
            wb = new SXSSFWorkbook(xwb, 5);
            s  = wb.GetSheet("Closed") as SXSSFSheet;
            s.FlushRows();
            s = wb.GetSheet("Open") as SXSSFSheet;
            s.CreateRow(0).CreateCell(0).CellFormula = (/*setter*/ "1+2");

            eval = wb.GetCreationHelper().CreateFormulaEvaluator();
            try
            {
                eval.EvaluateAll();
                Assert.Fail("Evaluate All shouldn't work, as sheets flushed");
            }
            catch (SheetsFlushedException) { }

            wb.Close();
        }
Esempio n. 6
0
        public void AutoSizeColumn_isColumnTrackedForAutoSizing()
        {
            workbook = new SXSSFWorkbook();
            sheet    = workbook.CreateSheet() as SXSSFSheet;

            sheet.TrackColumnsForAutoSizing(columns);
            foreach (int column in columns)
            {
                Assert.IsTrue(sheet.IsColumnTrackedForAutoSizing(column));

                Assume.That(!columns.Contains(column + 10));
                Assert.IsFalse(sheet.IsColumnTrackedForAutoSizing(column + 10));
            }
        }
Esempio n. 7
0
        private void InjectData(FileInfo zipfile, Stream outStream)
        {
            // don't use ZipHelper.openZipFile here - see #59743
            ZipFile zip = new ZipFile(zipfile.FullName);

            try
            {
                ZipOutputStream zos = new ZipOutputStream(outStream);
                try
                {
                    //ZipEntrySource zipEntrySource = new ZipFileZipEntrySource(zip);
                    //var en =  zipEntrySource.Entries;
                    var en = zip.GetEnumerator();
                    while (en.MoveNext())
                    {
                        var ze = (ZipEntry)en.Current;
                        zos.PutNextEntry(new ZipEntry(ze.Name));
                        var       inputStream = zip.GetInputStream(ze);
                        XSSFSheet xSheet      = GetSheetFromZipEntryName(ze.Name);
                        if (xSheet != null)
                        {
                            SXSSFSheet sxSheet = GetSXSSFSheet(xSheet);
                            var        xis     = sxSheet.GetWorksheetXMLInputStream();
                            try
                            {
                                CopyStreamAndInjectWorksheet(inputStream, zos, xis);
                            }
                            finally
                            {
                                xis.Close();
                            }
                        }
                        else
                        {
                            CopyStream(inputStream, zos);
                        }
                        inputStream.Close();
                    }
                }
                finally
                {
                    zos.Close();
                }
            }
            finally
            {
                zip.Close();
            }
        }
Esempio n. 8
0
        private SXSSFSheet CreateAndRegisterSXSSFSheet(ISheet xSheet)
        {
            SXSSFSheet sxSheet;

            try
            {
                sxSheet = new SXSSFSheet(this, (XSSFSheet)xSheet);
            }
            catch (IOException ioe)
            {
                throw new RuntimeException(ioe);
            }
            RegisterSheetMapping(sxSheet, (XSSFSheet)xSheet);
            return(sxSheet);
        }
Esempio n. 9
0
        public void Test_WindowSizeEqualsOne_lastRowIsWidest()
        {
            workbook = new SXSSFWorkbook(null, 1); // Window size 1 so only last row will be in memory
            sheet    = workbook.CreateSheet() as SXSSFSheet;
            sheet.TrackAllColumnsForAutoSizing();

            ICell cellRow0 = CreateRowWithCellValues(sheet, 0, SHORT_CELL_VALUE);

            assumeRequiredFontsAreInstalled(workbook, cellRow0);

            CreateRowWithCellValues(sheet, 1, LONG_CELL_VALUE);

            sheet.AutoSizeColumn(0, useMergedCells);

            assertColumnWidthStrictlyWithinRange(sheet.GetColumnWidth(0), COLUMN_WIDTH_THRESHOLD_BETWEEN_SHORT_AND_LONG, MAX_COLUMN_WIDTH);
        }
Esempio n. 10
0
        public void Test_WindowSizeDefault_AllRowsFitIntoWindowSize()
        {
            workbook = new SXSSFWorkbook();
            sheet    = workbook.CreateSheet() as SXSSFSheet;
            sheet.TrackAllColumnsForAutoSizing();

            ICell cellRow0 = CreateRowWithCellValues(sheet, 0, LONG_CELL_VALUE);

            assumeRequiredFontsAreInstalled(workbook, cellRow0);

            CreateRowWithCellValues(sheet, 1, SHORT_CELL_VALUE);

            sheet.AutoSizeColumn(0, useMergedCells);

            assertColumnWidthStrictlyWithinRange(sheet.GetColumnWidth(0), COLUMN_WIDTH_THRESHOLD_BETWEEN_SHORT_AND_LONG, MAX_COLUMN_WIDTH);
        }
Esempio n. 11
0
        private void DeregisterSheetMapping(XSSFSheet xSheet)
        {
            SXSSFSheet sxSheet = GetSXSSFSheet(xSheet);

            try
            {
                sxSheet._writer.Close();
            }
            catch (IOException e)
            {
                // ignore exception here
            }

            _sxFromXHash.Remove(sxSheet);

            _xFromSxHash.Remove(xSheet);
        }
Esempio n. 12
0
        private void DeregisterSheetMapping(XSSFSheet xSheet)
        {
            SXSSFSheet sxSheet = GetSXSSFSheet(xSheet);

            try
            {
                sxSheet._writer.Close();
            }
            catch (IOException) // ElectricSquare:  The variable 'e' is declared but never used
            {
                // ignore exception here
            }

            _sxFromXHash.Remove(sxSheet);

            _xFromSxHash.Remove(xSheet);
        }
Esempio n. 13
0
 private void InjectData(ZipEntrySource zipEntrySource, Stream outStream)
 {
     try
     {
         ZipOutputStream zos = new ZipOutputStream(outStream);
         try
         {
             var en = zipEntrySource.Entries;
             while (en.MoveNext())
             {
                 var ze = (ZipEntry)en.Current;
                 zos.PutNextEntry(new ZipEntry(ze.Name));
                 var       inputStream = zipEntrySource.GetInputStream(ze);
                 XSSFSheet xSheet      = GetSheetFromZipEntryName(ze.Name);
                 if (xSheet != null)
                 {
                     SXSSFSheet sxSheet = GetSXSSFSheet(xSheet);
                     var        xis     = sxSheet.getWorksheetXMLInputStream();
                     try
                     {
                         CopyStreamAndInjectWorksheet(inputStream, zos, xis);
                     }
                     finally
                     {
                         xis.Close();
                     }
                 }
                 else
                 {
                     CopyStream(inputStream, zos);
                 }
                 inputStream.Close();
             }
         }
         finally
         {
             zos.Close();
         }
     }
     finally
     {
         zipEntrySource.Close();
     }
 }
Esempio n. 14
0
        public void AutoSizeColumn_trackAllColumns_explicitUntrackColumn()
        {
            workbook = new SXSSFWorkbook();
            sheet    = workbook.CreateSheet() as SXSSFSheet;

            sheet.TrackColumnsForAutoSizing(columns);
            sheet.TrackAllColumnsForAutoSizing();

            sheet.UntrackColumnForAutoSizing(0);
            try
            {
                sheet.AutoSizeColumn(0, useMergedCells);
                Assert.Fail("Should not be able to auto-size an explicitly untracked column");
            }
            catch (InvalidOperationException)
            {
                // expected
            }
        }
Esempio n. 15
0
        public void TestEvaluateSimple()
        {
            SXSSFWorkbook wb = new SXSSFWorkbook(5);
            SXSSFSheet    s  = wb.CreateSheet() as SXSSFSheet;

            IFormulaEvaluator eval = wb.GetCreationHelper().CreateFormulaEvaluator();

            SXSSFCell c = s.CreateRow(0).CreateCell(0) as SXSSFCell;

            c.CellFormula = (/*setter*/ "1+2");
            Assert.AreEqual(0, (int)c.NumericCellValue);
            eval.EvaluateFormulaCell(c);
            Assert.AreEqual(3, (int)c.NumericCellValue);

            c             = s.CreateRow(1).CreateCell(0) as SXSSFCell;
            c.CellFormula = (/*setter*/ "CONCATENATE(\"hello\",\" \",\"world\")");
            eval.EvaluateFormulaCell(c);
            Assert.AreEqual("hello world", c.StringCellValue);
        }
Esempio n. 16
0
        public void TestEvaluateAllInWindow()
        {
            SXSSFWorkbook wb = new SXSSFWorkbook(5);
            SXSSFSheet    s  = wb.CreateSheet() as SXSSFSheet;

            s.CreateRow(0).CreateCell(0).CellFormula = (/*setter*/ "1+2");
            s.CreateRow(1).CreateCell(1).CellFormula = (/*setter*/ "A1+10");
            s.CreateRow(2).CreateCell(2).CellFormula = (/*setter*/ "B2+100");

            IFormulaEvaluator eval = wb.GetCreationHelper().CreateFormulaEvaluator();

            eval.EvaluateAll();

            Assert.AreEqual(3, (int)s.GetRow(0).GetCell(0).NumericCellValue);
            Assert.AreEqual(13, (int)s.GetRow(1).GetCell(1).NumericCellValue);
            Assert.AreEqual(113, (int)s.GetRow(2).GetCell(2).NumericCellValue);

            wb.Close();
        }
Esempio n. 17
0
        public void TestEvaluateRefInsideWindow()
        {
            SXSSFWorkbook wb = new SXSSFWorkbook(5);
            SXSSFSheet    s  = wb.CreateSheet() as SXSSFSheet;

            IFormulaEvaluator eval = wb.GetCreationHelper().CreateFormulaEvaluator();

            SXSSFCell c = s.CreateRow(0).CreateCell(0) as SXSSFCell;

            c.SetCellValue(1.5);

            c             = s.CreateRow(1).CreateCell(0) as SXSSFCell;
            c.CellFormula = (/*setter*/ "A1*2");

            Assert.AreEqual(0, (int)c.NumericCellValue);
            eval.EvaluateFormulaCell(c);
            Assert.AreEqual(3, (int)c.NumericCellValue);

            wb.Close();
        }
Esempio n. 18
0
        public void AutoSizeColumn_untrackColumnForAutoSizing()
        {
            workbook = new SXSSFWorkbook();
            sheet    = workbook.CreateSheet() as SXSSFSheet;

            sheet.TrackColumnsForAutoSizing(columns);
            sheet.UntrackColumnForAutoSizing(columns.First());

            Assume.That(sheet.TrackedColumnsForAutoSizing.Contains(columns.Last()));
            sheet.AutoSizeColumn(columns.Last(), useMergedCells);
            try
            {
                Assume.That(!sheet.TrackedColumnsForAutoSizing.Contains(columns.First()));
                sheet.AutoSizeColumn(columns.First(), useMergedCells);
                Assert.Fail("Should not be able to auto-size an untracked column");
            }
            catch (InvalidOperationException)
            {
                // expected
            }
        }
Esempio n. 19
0
        public void Test_WindowSizeEqualsOne_flushedRowHasMergedCell()
        {
            workbook = new SXSSFWorkbook(null, 1); // Window size 1 so only last row will be in memory
            sheet    = workbook.CreateSheet() as SXSSFSheet;
            sheet.TrackAllColumnsForAutoSizing();

            ICell a1 = CreateRowWithCellValues(sheet, 0, LONG_CELL_VALUE);

            assumeRequiredFontsAreInstalled(workbook, a1);
            sheet.AddMergedRegion(CellRangeAddress.ValueOf("A1:B1"));

            CreateRowWithCellValues(sheet, 1, SHORT_CELL_VALUE, SHORT_CELL_VALUE);

            /**
             *    A      B
             * 1 LONGMERGED
             * 2 SHORT SHORT
             */

            sheet.AutoSizeColumn(0, useMergedCells);
            sheet.AutoSizeColumn(1, useMergedCells);

            if (useMergedCells)
            {
                // Excel and LibreOffice behavior: ignore merged cells for auto-sizing.
                // POI behavior: evenly distribute the column width among the merged columns.
                //               each column must be auto-sized in order for the column widths
                //               to add up to the best fit width.
                int colspan          = 2;
                int expectedWidth    = (10000 + 1000) / colspan; //average of 1_000 and 10_000
                int minExpectedWidth = expectedWidth / 2;
                int maxExpectedWidth = expectedWidth * 3 / 2;
                assertColumnWidthStrictlyWithinRange(sheet.GetColumnWidth(0), minExpectedWidth, maxExpectedWidth); //short
            }
            else
            {
                assertColumnWidthStrictlyWithinRange(sheet.GetColumnWidth(0), COLUMN_WIDTH_THRESHOLD_BETWEEN_SHORT_AND_LONG, MAX_COLUMN_WIDTH); //long
            }
            assertColumnWidthStrictlyWithinRange(sheet.GetColumnWidth(1), 0, COLUMN_WIDTH_THRESHOLD_BETWEEN_SHORT_AND_LONG);                    //short
        }
Esempio n. 20
0
        public void AutoSizeColumn_trackColumnForAutoSizing()
        {
            workbook = new SXSSFWorkbook();
            sheet    = workbook.CreateSheet() as SXSSFSheet;
            sheet.TrackColumnForAutoSizing(0);

            SortedSet <int> expected = new SortedSet <int>();

            expected.Add(0);
            Assert.AreEqual(expected, sheet.TrackedColumnsForAutoSizing);

            sheet.AutoSizeColumn(0, useMergedCells);
            try
            {
                sheet.AutoSizeColumn(1, useMergedCells);
                Assert.Fail("Should not be able to auto-size an untracked column");
            }
            catch (InvalidOperationException)
            {
                // expected
            }
        }
Esempio n. 21
0
        public void AutoSizeColumn_trackColumnsForAutoSizing()
        {
            workbook = new SXSSFWorkbook();
            sheet    = workbook.CreateSheet() as SXSSFSheet;

            sheet.TrackColumnsForAutoSizing(columns);
            SortedSet <int> sorted = new SortedSet <int>(columns);

            Assert.AreEqual(sorted, sheet.TrackedColumnsForAutoSizing);

            sheet.AutoSizeColumn(sorted.First(), useMergedCells);
            try
            {
                //assumeFalse(columns.Contains(5));
                Assume.That(!columns.Contains(5));
                sheet.AutoSizeColumn(5, useMergedCells);
                Assert.Fail("Should not be able to auto-size an untracked column");
            }
            catch (InvalidOperationException)
            {
                // expected
            }
        }
Esempio n. 22
0
        public void SheetdataWriter()
        {
            SXSSFWorkbook   wb = new SXSSFWorkbook();
            SXSSFSheet      sh = wb.CreateSheet() as SXSSFSheet;
            SheetDataWriter wr = sh.SheetDataWriter;

            Assert.IsTrue(wr.GetType() == typeof(SheetDataWriter));
            FileInfo tmp = wr.TempFileInfo;

            Assert.IsTrue(tmp.Name.StartsWith("poi-sxssf-sheet"));
            Assert.IsTrue(tmp.Name.EndsWith(".xml"));
            Assert.IsTrue(wb.Dispose());
            wb.Close();

            wb = new SXSSFWorkbook();
            wb.CompressTempFiles = (/*setter*/ true);
            sh = wb.CreateSheet() as SXSSFSheet;
            wr = sh.SheetDataWriter;
            Assert.IsTrue(wr.GetType() == typeof(GZIPSheetDataWriter));
            tmp = wr.TempFileInfo;
            Assert.IsTrue(tmp.Name.StartsWith("poi-sxssf-sheet-xml"));
            Assert.IsTrue(tmp.Name.EndsWith(".gz"));
            Assert.IsTrue(wb.Dispose());
            wb.Close();

            //Test escaping of Unicode control characters
            wb = new SXSSFWorkbook();
            wb.CreateSheet("S1").CreateRow(0).CreateCell(0).SetCellValue("value\u0019");
            XSSFWorkbook xssfWorkbook = SXSSFITestDataProvider.instance.WriteOutAndReadBack(wb) as XSSFWorkbook;
            ICell        cell         = xssfWorkbook.GetSheet("S1").GetRow(0).GetCell(0);

            Assert.AreEqual("value?", cell.StringCellValue);

            Assert.IsTrue(wb.Dispose());
            wb.Close();
            xssfWorkbook.Close();
        }
Esempio n. 23
0
        protected static void assertWorkbookDispose(SXSSFWorkbook wb)
        {
            int rowNum   = 1000;
            int sheetNum = 5;

            for (int i = 0; i < sheetNum; i++)
            {
                ISheet sh = wb.CreateSheet("sheet" + i);
                for (int j = 0; j < rowNum; j++)
                {
                    IRow  row   = sh.CreateRow(j);
                    ICell cell1 = row.CreateCell(0);
                    cell1.SetCellValue(new CellReference(cell1).FormatAsString());

                    ICell cell2 = row.CreateCell(1);
                    cell2.SetCellValue(i);

                    ICell cell3 = row.CreateCell(2);
                    cell3.SetCellValue(j);
                }
            }

            foreach (ISheet sheet in wb)
            {
                SXSSFSheet sxSheet = (SXSSFSheet)sheet;
                Assert.IsTrue(sxSheet.SheetDataWriter.TempFileInfo.Exists);
            }

            Assert.IsTrue(wb.Dispose());

            foreach (ISheet sheet in wb)
            {
                SXSSFSheet sxSheet = (SXSSFSheet)sheet;
                Assert.IsFalse(sxSheet.SheetDataWriter.TempFileInfo.Exists);
            }
        }
Esempio n. 24
0
 public SXSSFRow(SXSSFSheet sheet)
 {
     _sheet = sheet;
 }
Esempio n. 25
0
        public override int GetSheetIndex(IEvaluationSheet evalSheet)
        {
            SXSSFSheet sheet = ((SXSSFEvaluationSheet)evalSheet).GetSXSSFSheet();

            return(_xBook.GetSheetIndex(sheet));
        }
Esempio n. 26
0
        public int getSheetIndex(SXSSFEvaluationSheet evalSheet)
        {
            SXSSFSheet sheet = ((SXSSFEvaluationSheet)evalSheet).getSXSSFSheet();

            return(_uBook.GetSheetIndex(sheet));
        }
Esempio n. 27
0
 public void SetUpSheetAndWorkbook()
 {
     workbook = new SXSSFWorkbook();
     sheet    = workbook.CreateSheet() as SXSSFSheet;
     tracker  = new AutoSizeColumnTracker(sheet);
 }
Esempio n. 28
0
 private XSSFSheet GetXSSFSheet(SXSSFSheet sheet)
 {
     return(_sxFromXHash[sheet]);
 }
Esempio n. 29
0
 private void RegisterSheetMapping(SXSSFSheet sxSheet, XSSFSheet xSheet)
 {
     _sxFromXHash.Add(sxSheet, xSheet);
     _xFromSxHash.Add(xSheet, sxSheet);
 }
Esempio n. 30
0
 public SXSSFEvaluationSheet(SXSSFSheet sheet)
 {
     _xs = sheet;
 }