/**
  * 出力対象のシートか判定する
  *
  * @param sheet テンプレートシート
  * @param reportBook 帳票ワークブック情報
  * @return
  */
 private boolean isOutputSheet(Sheet sheet, ReportBook reportBook) {
   for (ReportSheet reportSheet : reportBook.getReportSheets()) {
     if (reportSheet != null && sheet.getSheetName().equals(reportSheet.getSheetName())) {
       return true;
     }
   }
   return false;
 }
  /**
   * テンプレートワークブックのシートを、帳票出力単位に変換する。
   *
   * @param workbook テンプレートワークブック
   * @param reportBook 帳票ワークブック情報
   * @return 削除が必要なテンプレートシートインデックス
   */
  private Set<Integer> expandTemplate(Workbook workbook, ReportBook reportBook) {

    Set<Integer> delTemplateIndexs = new TreeSet<Integer>(Collections.reverseOrder());
    Set<Integer> useTemplateIndexs = new HashSet<Integer>();

    // 出力シート単位にコピーする
    for (ReportSheet reportSheet : reportBook.getReportSheets()) {

      if (reportSheet != null) {
        if (reportSheet.getSheetName().equals(reportSheet.getTemplateName())) {
          // テンプレート名=出力シート名
          int lastSheetIndex = workbook.getNumberOfSheets() - 1;
          workbook.setSheetOrder(reportSheet.getSheetName(), lastSheetIndex);
          useTemplateIndexs.add(lastSheetIndex);
        } else {
          int tempIdx = workbook.getSheetIndex(reportSheet.getTemplateName());

          Sheet sheet = workbook.cloneSheet(tempIdx);
          workbook.setSheetName(workbook.getSheetIndex(sheet), reportSheet.getSheetName());
          delTemplateIndexs.add(tempIdx);
        }
      }
    }

    // 出力対象外シートを削除インデックスに追加
    for (int i = 0; i < workbook.getNumberOfSheets(); i++) {
      Sheet sheet = workbook.getSheetAt(i);
      if (!isOutputSheet(sheet, reportBook)) {
        delTemplateIndexs.add(workbook.getSheetIndex(sheet));
      }
    }

    delTemplateIndexs.removeAll(useTemplateIndexs);

    return delTemplateIndexs;
  }