Пример #1
0
        public void ShouldNotBeAbleToCreateArrayFormulaOnPreexistingMergedRegion()
        {
            /*
             *  m  = merged region
             *  f  = array formula
             *  fm = cell belongs to a merged region and an array formula (illegal, that's what this tests for)
             *
             *   A  B  C
             * 1    f  f
             * 2    fm fm
             * 3    f  f
             */
            IWorkbook workbook = _testDataProvider.CreateWorkbook();
            ISheet    sheet    = workbook.CreateSheet();

            CellRangeAddress mergedRegion = CellRangeAddress.ValueOf("B2:C2");

            sheet.AddMergedRegion(mergedRegion);
            CellRangeAddress arrayFormula = CellRangeAddress.ValueOf("C1:C3");

            Assume.That(mergedRegion.Intersects(arrayFormula));
            Assume.That(arrayFormula.Intersects(mergedRegion));
            try
            {
                sheet.SetArrayFormula("SUM(A1:A3)", arrayFormula);
                Assert.Fail("expected exception: should not be able to create an array formula that intersects with a merged region");
            }
            catch (InvalidOperationException e)
            {
                // expected
            }

            workbook.Close();
        }
Пример #2
0
        // Keep in sync with {@link ColumnShifter#removalNeeded}
        private bool removalNeeded(CellRangeAddress merged, int startRow, int endRow, int n, int lastCol)
        {
            int movedRows = endRow - startRow + 1;

            // build a range of the rows that are overwritten, i.e. the target-area, but without
            // rows that are moved along
            CellRangeAddress overwrite;

            if (n > 0)
            {
                // area is moved down => overwritten area is [endRow + n - movedRows, endRow + n]
                int firstRow = Math.Max(endRow + 1, endRow + n - movedRows);
                int lastRow  = endRow + n;
                overwrite = new CellRangeAddress(firstRow, lastRow, 0, lastCol);
            }
            else
            {
                // area is moved up => overwritten area is [startRow + n, startRow + n + movedRows]
                int firstRow = startRow + n;
                int lastRow  = Math.Min(startRow - 1, startRow + n + movedRows);
                overwrite = new CellRangeAddress(firstRow, lastRow, 0, lastCol);
            }

            // if the merged-region and the overwritten area intersect, we need to remove it
            return(merged.Intersects(overwrite));
        }
Пример #3
0
 private static void assertNotIntersects(CellRangeAddress regionA, CellRangeAddress regionB)
 {
     if ((regionA.Intersects(regionB) || regionB.Intersects(regionA)))
     {
         String A = regionA.FormatAsString();
         String B = regionB.FormatAsString();
         Assert.Fail("expected: regions " + A + " and " + B + " do not intersect");
     }
 }