예제 #1
0
  /**
   * 构造每个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;
      }
    }
  }
예제 #2
0
  /**
   * 判断是否有枚举值
   *
   * @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;
  }