Example usage for org.apache.poi.ss.util CellRangeUtil intersect

List of usage examples for org.apache.poi.ss.util CellRangeUtil intersect

Introduction

In this page you can find the example usage for org.apache.poi.ss.util CellRangeUtil intersect.

Prototype

public static int intersect(CellRangeAddress crA, CellRangeAddress crB) 

Source Link

Document

Get the type of intersection between two cell ranges

Usage

From source file:com.vaadin.addon.spreadsheet.action.DeleteTableAction.java

License:Open Source License

@Override
public boolean isApplicableForSelection(Spreadsheet spreadsheet, SelectionChangeEvent event) {
    if (!spreadsheet.getActiveSheet().getProtect() && (event.getIndividualSelectedCells().size() == 0)) {
        if (event.getCellRangeAddresses().size() == 1) {
            List<CellRangeAddress> cras = event.getCellRangeAddresses();
            CellRangeAddress cra = cras.get(0);
            List<SpreadsheetTable> tablesForActiveSheet = spreadsheet.getTablesForActiveSheet();
            for (SpreadsheetTable table : tablesForActiveSheet) {
                if (CellRangeUtil.intersect(cra, table.getFullTableRegion()) != CellRangeUtil.NO_INTERSECTION) {
                    setCaption("Delete Table " + table.getFullTableRegion().formatAsString());
                    tableToDelete = table;
                    return true;
                }// w ww. ja va 2s  .c o  m
            }
        } else {
            CellReference selectedCellReference = event.getSelectedCellReference();
            List<SpreadsheetTable> tablesForActiveSheet = spreadsheet.getTablesForActiveSheet();
            for (SpreadsheetTable table : tablesForActiveSheet) {
                if (table.getFullTableRegion().isInRange(selectedCellReference.getRow(),
                        selectedCellReference.getCol())) {
                    setCaption("Delete Table " + table.getFullTableRegion().formatAsString());
                    tableToDelete = table;
                    return true;
                }
            }
        }
    }
    tableToDelete = null;
    return false;
}

From source file:com.vaadin.addon.spreadsheet.action.InsertTableAction.java

License:Open Source License

@Override
public boolean isApplicableForSelection(Spreadsheet spreadsheet, SelectionChangeEvent event) {
    if (!spreadsheet.getActiveSheet().getProtect() && event.getIndividualSelectedCells().size() == 0
            && event.getCellRangeAddresses().size() == 1) {
        List<CellRangeAddress> cras = event.getCellRangeAddresses();
        CellRangeAddress cra = cras.get(0);
        List<SpreadsheetTable> tablesForActiveSheet = spreadsheet.getTablesForActiveSheet();
        // check that the table doesn't contain a table that intersects with
        // the current selection
        for (SpreadsheetTable table : tablesForActiveSheet) {
            if (CellRangeUtil.intersect(cra, table.getFullTableRegion()) != CellRangeUtil.NO_INTERSECTION) {
                return false;
            }/*from   w ww  .  j a  va 2s. c o  m*/
        }
        if (cra.getFirstRow() != cra.getLastRow()) {
            setCaption("Create Table on " + cra.formatAsString());
            return true;
        }
    }
    return false;
}

From source file:com.vaadin.addon.spreadsheet.Spreadsheet.java

License:Open Source License

/**
 * Merges the given cells. See/*from ww w  . ja v a2  s . com*/
 * {@link Sheet#addMergedRegion(CellRangeAddress)}.
 * <p>
 * If another existing merged region is completely inside the given range,
 * it is removed. If another existing region either encloses or overlaps the
 * given range, an error is thrown. See
 * {@link CellRangeUtil#intersect(CellRangeAddress, CellRangeAddress)}.
 * <p>
 * Note: POI doesn't seem to update the cells that are "removed" due to the
 * merge - the values for those cells still exist and continue being used in
 * possible formulas. If you need to make sure those values are removed,
 * just delete the cells before creating the merged region.
 * <p>
 * If the added region affects the currently selected cell, a new
 * {@link SelectionChangeEvent} is fired.
 * 
 * @param region
 *            The range of cells to merge
 * @throws IllegalArgumentException
 *             If the given region overlaps with or encloses another
 *             existing region within the sheet.
 */
public void addMergedRegion(CellRangeAddress region) throws IllegalArgumentException {
    final Sheet sheet = getActiveSheet();
    // need to check if there are merged regions already inside the given
    // range, otherwise very bad inconsistencies appear.
    int index = 0;
    while (index < sheet.getNumMergedRegions()) {
        CellRangeAddress existingRegion = sheet.getMergedRegion(index);
        int intersect = CellRangeUtil.intersect(region, existingRegion);
        if (intersect == CellRangeUtil.INSIDE) {
            deleteMergedRegion(index);
        } else if (intersect == CellRangeUtil.OVERLAP || intersect == CellRangeUtil.ENCLOSES) {
            throw new IllegalArgumentException("An existing region " + existingRegion + " "
                    + (intersect == CellRangeUtil.OVERLAP ? "overlaps " : "encloses ") + "the given region "
                    + region);
        } else {
            index++;
        }
    }
    createMergedRegionIntoSheet(region);
    selectionManager.mergedRegionAdded(region);
}