Search in sources :

Example 1 with CellRange

use of com.alibaba.excel.metadata.CellRange in project easyexcel by alibaba.

the class ExcelWriteHeadProperty method headCellRangeList.

/**
 * Calculate all cells that need to be merged
 *
 * @return cells that need to be merged
 */
public List<CellRange> headCellRangeList() {
    List<CellRange> cellRangeList = new ArrayList<CellRange>();
    Set<String> alreadyRangeSet = new HashSet<String>();
    List<Head> headList = new ArrayList<Head>(getHeadMap().values());
    for (int i = 0; i < headList.size(); i++) {
        Head head = headList.get(i);
        List<String> headNameList = head.getHeadNameList();
        for (int j = 0; j < headNameList.size(); j++) {
            if (alreadyRangeSet.contains(i + "-" + j)) {
                continue;
            }
            alreadyRangeSet.add(i + "-" + j);
            String headName = headNameList.get(j);
            int lastCol = i;
            int lastRow = j;
            for (int k = i + 1; k < headList.size(); k++) {
                String key = k + "-" + j;
                if (headList.get(k).getHeadNameList().get(j).equals(headName) && !alreadyRangeSet.contains(key)) {
                    alreadyRangeSet.add(key);
                    lastCol = k;
                } else {
                    break;
                }
            }
            Set<String> tempAlreadyRangeSet = new HashSet<>();
            outer: for (int k = j + 1; k < headNameList.size(); k++) {
                for (int l = i; l <= lastCol; l++) {
                    String key = l + "-" + k;
                    if (headList.get(l).getHeadNameList().get(k).equals(headName) && !alreadyRangeSet.contains(key)) {
                        tempAlreadyRangeSet.add(l + "-" + k);
                    } else {
                        break outer;
                    }
                }
                lastRow = k;
                alreadyRangeSet.addAll(tempAlreadyRangeSet);
            }
            if (j == lastRow && i == lastCol) {
                continue;
            }
            cellRangeList.add(new CellRange(j, lastRow, head.getColumnIndex(), headList.get(lastCol).getColumnIndex()));
        }
    }
    return cellRangeList;
}
Also used : Head(com.alibaba.excel.metadata.Head) CellRange(com.alibaba.excel.metadata.CellRange) ArrayList(java.util.ArrayList) HashSet(java.util.HashSet)

Aggregations

CellRange (com.alibaba.excel.metadata.CellRange)1 Head (com.alibaba.excel.metadata.Head)1 ArrayList (java.util.ArrayList)1 HashSet (java.util.HashSet)1