/** * 构造每个bop的布局样式 R2(C2(bop1, bop2)) 或 R2(bop3, C2(bop1, bop2)) * <li>1. 遍历表达式, 解析子元素; * <li>2. 遇到左括号,将R2, C2 表达式压入表达式栈顶; * <li>3. 遇到逗号, 如果栈不为空, 将栈中的所有表达式代表的含义赋予bop, 将bop压入cellMap; 如果栈为空, 直接略过; * <li>4. 遇到右括号, 将栈中的所有表达式代表的含义赋予bop, 将bop压入cellMap, 从表达式栈顶弹出一项. * * @param str */ private void interpertFormCell(String str) { // 表达式栈, 存储 R1, C1, R2, C2等合并单元格的表达式 Stack<String> stack = new Stack<String>(); // 表达式的元素 String atom = ""; // 遍历表达式, 解析子元素 for (int i = 0, length = str.length(); i < length; i++) { char ch = str.charAt(i); // 遇到左括号,将R2, C2 表达式压入表达式栈顶 if (LEFT_BRACKET == ch) { stack.push(atom); atom = ""; } // 遇到逗号, 如果栈不为空, 将栈中的所有表达式代表的含义赋予bop, 将bop压入cellMap; // 如果栈为空, 直接略过; else if (FC_SPLIT == ch) { if (ContainerUtil.isNotNull(stack)) formatCell(atom, stack); atom = ""; } // 遇到右括号, 将栈中的所有表达式代表的含义赋予bop, 将bop压入cellMap, 从表达式栈顶弹出一项 else if (RIGHT_BRACKET == ch) { if (StringUtils.isNotEmpty(atom)) formatCell(atom, stack); stack.pop(); atom = ""; } else { atom += ch; } } }
/** * 判断是否有枚举值 * * @return */ public boolean hasItems() { boolean result = false; Set<Range> rangeList = getBc().getRange().getRangeList(); for (Range rang : rangeList) { if (rang instanceof EnumRange) { EnumRange enumRange = (EnumRange) rang; Map<String, String> map = enumRange.getResult(); if (ContainerUtil.isNotNull(map)) result = true; } } return result; }