예제 #1
0
파일: OoxmlUtil.java 프로젝트: zhangrui1/SK
  /**
   * 罫線スタイルの<b>CellStyle</b>を生成 1行のみ描画する
   *
   * @param workbook ワークブック
   * @param sheet シート
   * @param nRow 行
   * @param nColumn       列
   * @param isBold 太字フラグ
   * @param fontSize 文字サイズ
   * @param fontHeight 行高
   */
  public static void setCellStyleForLabel(
      XSSFWorkbook workbook,
      XSSFSheet sheet,
      int nRow,
      int nColumn,
      boolean isBold,
      short fontSize,
      float fontHeight) {
    assert sheet != null;

    // style設定
    XSSFCellStyle style = workbook.createCellStyle();
    XSSFFont font = workbook.createFont();
    if (isBold) {
      font.setBoldweight(XSSFFont.BOLDWEIGHT_BOLD); // 文字太字
    }
    font.setFontHeightInPoints((short) fontSize); // 文字サイズ
    font.setFontName(DEFAULT_FONT_NAME);
    style.setFont(font); // 文字太字 と 文字サイズ

    style.setAlignment(CellStyle.ALIGN_GENERAL); // 水平方向の標準
    style.setVerticalAlignment(CellStyle.VERTICAL_TOP); // 垂直方向の上詰め
    style.setWrapText(true); // 折り返して全体を表示する

    // セルに罫線を描画
    XSSFRow row = getRowAnyway(sheet, nRow);
    XSSFCell cell = getCellAnyway(row, nColumn);
    cell.setCellStyle(style);
    row.setHeightInPoints(fontHeight); // 行高設定
  }
예제 #2
0
파일: OoxmlUtil.java 프로젝트: zhangrui1/SK
 /**
  * 指定行を0で埋める
  *
  * @param sheet 編集対象シート
  * @param nRow 行番号
  * @param nStartColumn 開始列番号
  * @param nEndColumn 終了列番号
  */
 public static void setZero(XSSFSheet sheet, int nRow, int nStartColumn, int nEndColumn) {
   XSSFRow row = getRowAnyway(sheet, nRow);
   for (int nIndex = nStartColumn; nIndex <= nEndColumn; nIndex++) {
     XSSFCell cell = getCellAnyway(row, nIndex);
     cell.setCellType(XSSFCell.CELL_TYPE_NUMERIC);
     cell.setCellValue((double) 0);
   }
 }
예제 #3
0
파일: OoxmlUtil.java 프로젝트: zhangrui1/SK
 /**
  * 全てのシートの先頭セルにフォーカスをあてる
  *
  * @param workbook ワークブック
  */
 public static void setFocusFistCell(XSSFWorkbook workbook) {
   assert workbook != null;
   for (int nIndex = 0; nIndex < workbook.getNumberOfSheets(); nIndex++) {
     XSSFSheet sheet = workbook.getSheetAt(nIndex);
     XSSFCell cell = getFirstCell(sheet);
     assert cell != null;
     cell.setAsActiveCell();
   }
 }
예제 #4
0
파일: OoxmlUtil.java 프로젝트: zhangrui1/SK
  /**
   * セルの縮小して全体を表示する
   *
   * @param nRow 行データ
   * @return 有効列数
   */
  public static void setShrinkToFitForCell(XSSFWorkbook wb, XSSFSheet sheet, int nRow, int nCol) {

    XSSFRow row = OoxmlUtil.getRowAnyway(sheet, nRow);
    XSSFCell cell = OoxmlUtil.getCellAnyway(row, nCol);
    CellStyle styletmp = cell.getCellStyle();
    CellStyle newStyletmp = wb.createCellStyle();
    newStyletmp.cloneStyleFrom(styletmp);
    newStyletmp.setWrapText(false); // 折り返して全体を表示する
    newStyletmp.setShrinkToFit(true); // 縮小して全体を表示する
    cell.setCellStyle(newStyletmp);
  }
예제 #5
0
파일: OoxmlUtil.java 프로젝트: zhangrui1/SK
 /**
  * セルの値を取得する
  *
  * @param row 行データ
  * @param nColumn 列番号
  * @return セルの値
  */
 public static Object getData(XSSFRow row, int nColumn) {
   if (row != null) {
     XSSFCell cell = row.getCell(nColumn);
     if (cell != null) {
       if (XSSFCell.CELL_TYPE_NUMERIC == cell.getCellType()) {
         return cell.getNumericCellValue();
       } else if (XSSFCell.CELL_TYPE_STRING == cell.getCellType()) {
         return cell.getStringCellValue();
       }
     }
   }
   return null;
 }
예제 #6
0
파일: OoxmlUtil.java 프로젝트: zhangrui1/SK
 /**
  * 列方向のセルの値を合算する
  *
  * @param sheet 編集対象シート
  * @param nColumn 行番号
  * @param nStartRow 開始列番号
  * @param nEndRow 終了列番号
  * @return 合算値
  */
 public static int sumColumn(XSSFSheet sheet, int nColumn, int nStartRow, int nEndRow) {
   int sum = 0;
   for (int nIndex = nStartRow; nIndex <= nEndRow; nIndex++) {
     XSSFRow row = sheet.getRow(nIndex);
     assert row != null;
     XSSFCell cell = row.getCell(nColumn);
     assert cell != null;
     if (cell.getCellType() == XSSFCell.CELL_TYPE_NUMERIC) {
       sum += cell.getNumericCellValue();
     }
   }
   return sum;
 }
예제 #7
0
파일: OoxmlUtil.java 프로젝트: zhangrui1/SK
 /**
  * 罫線スタイルの<b>CellStyle</b>を生成 セル結合
  *
  * @param workbook ワークブック
  * @param sheet シート
  * @param nRowStart 開始行
  * @param nRowEnd       終了行
  * @param nColumnStart       開始列
  * @param nColumnEnd       終了列
  * @param style 罫線style
  */
 public static void setMerger(
     XSSFWorkbook workbook,
     XSSFSheet sheet,
     int nRowStart,
     int nRowEnd,
     int nColumnStart,
     int nColumnEnd,
     XSSFCellStyle style) {
   assert sheet != null;
   sheet.addMergedRegion(new CellRangeAddress(nRowStart, nRowEnd, nColumnStart, nColumnEnd));
   XSSFRow row = getRowAnyway(sheet, nRowStart);
   XSSFCell cell = getCellAnyway(row, nColumnStart);
   cell.setCellStyle(style);
 }
예제 #8
0
파일: OoxmlUtil.java 프로젝트: zhangrui1/SK
 /**
  * 指定範囲にセルを新規作成
  *
  * @param sheet シート
  * @param startRow 開始行番号
  * @param endRow 終了行番号
  * @param startColumn 開始列番号
  * @param endColumn 終了列番号
  * @param style セルスタイル
  */
 public static void setStyle(
     XSSFSheet sheet,
     int startRow,
     int endRow,
     int startColumn,
     int endColumn,
     XSSFCellStyle style) {
   for (int nRow = startRow; nRow <= endRow; nRow++) {
     XSSFRow row = getRowAnyway(sheet, nRow);
     for (int nColumn = startColumn; nColumn <= endColumn; nColumn++) {
       XSSFCell cell = getCellAnyway(row, nColumn);
       cell.setCellStyle(style);
     }
   }
 }
예제 #9
0
파일: OoxmlUtil.java 프로젝트: zhangrui1/SK
 /**
  * 上線は太線のセル行を探す
  *
  * @param nRow 行データ
  * @return 有効列数
  */
 public static int getRowForBold(XSSFSheet sheet, int nRow, int pageRowNum) {
   int nRowIndex = nRow;
   for (nRowIndex = nRow; nRowIndex > (nRow - pageRowNum); nRow--) {
     XSSFRow row = OoxmlUtil.getRowAnyway(sheet, nRow);
     if (row != null) {
       XSSFCell cell = row.getCell(0);
       XSSFCellStyle styletmp = cell.getCellStyle();
       short borderTopnum = styletmp.getBorderTop();
       short borderBold = XSSFCellStyle.BORDER_MEDIUM;
       if (styletmp.getBorderTop() == (XSSFCellStyle.BORDER_MEDIUM)) {
         break;
       }
     }
   }
   return nRowIndex;
 }
예제 #10
0
파일: OoxmlUtil.java 프로젝트: zhangrui1/SK
 /**
  * ハイパーリンクの設定
  *
  * @param sheet シート
  * @param nRow 対象行番号
  * @param nColumn 対象列番号
  * @param value ハイパーリンクテキスト
  * @param url ハイパーリンク先URL
  */
 public static void setHyperLink(
     XSSFSheet sheet, int nRow, int nColumn, String value, String url) {
   assert sheet != null;
   XSSFWorkbook workbook = sheet.getWorkbook();
   CreationHelper helper = workbook.getCreationHelper();
   Hyperlink hyperlink = helper.createHyperlink(Hyperlink.LINK_URL);
   hyperlink.setAddress(url);
   XSSFRow row = getRowAnyway(sheet, nRow);
   XSSFCell cell = getCellAnyway(row, nColumn);
   cell.setCellValue(value);
   cell.setHyperlink(hyperlink);
   // ハイパーリンクテキストの装飾
   XSSFFont font = workbook.createFont();
   XSSFCellStyle style = workbook.createCellStyle();
   // font.setColor(new XSSFColor(new Color(0, 0, 255)));
   font.setUnderline(XSSFFont.U_SINGLE);
   style.setFont(font);
   cell.setCellStyle(style);
 }
예제 #11
0
파일: OoxmlUtil.java 프로젝트: zhangrui1/SK
  /**
   * 罫線スタイルの<b>CellStyle</b>を生成 1行のみ描画する
   *
   * @param workbook ワークブック
   * @param sheet シート
   * @param nRowStart 開始行
   * @param nRowEnd       終了行
   * @param nColumnStart       開始列
   * @param nColumnEnd       終了列
   * @param isBorder 罫線描画フラグ
   * @param style 罫線style
   */
  public static void setRowDataCellStyle(
      XSSFWorkbook workbook,
      XSSFSheet sheet,
      int nRowStart,
      int nRowEnd,
      int nColumnStart,
      int nColumnEnd,
      boolean isBorder,
      XSSFCellStyle style) {
    assert sheet != null;

    // Range内のすべてセルに罫線を描画
    for (int rIndex = nRowStart; rIndex <= nRowEnd; rIndex++) {
      XSSFRow row = getRowAnyway(sheet, rIndex);
      for (int cIndex = nColumnStart; cIndex <= nColumnEnd; cIndex++) {
        XSSFCell cell = getCellAnyway(row, cIndex);
        cell.setCellStyle(style);
      }
    }
  }
예제 #12
0
  private void generateExcelDoc(String docName) throws FileNotFoundException, IOException {
    XSSFWorkbook workbook = new XSSFWorkbook();
    XSSFSheet overall = workbook.createSheet("Overall");
    XSSFRow row = overall.createRow(0);

    XSSFCellStyle topStyle = workbook.createCellStyle();
    topStyle.setAlignment(CellStyle.ALIGN_CENTER);

    XSSFCell theme = row.createCell(0);
    theme.setCellValue("Theme");
    overall.autoSizeColumn(0);

    XSSFCell occurs = row.createCell(1);
    occurs.setCellValue("Occurrences");
    overall.autoSizeColumn(1);

    XSSFCell prev = row.createCell(2);
    prev.setCellValue("Prevalence");
    overall.autoSizeColumn(2);

    theme.setCellStyle(topStyle);
    occurs.setCellStyle(topStyle);
    prev.setCellStyle(topStyle);

    for (int i = 0; i < themes.size(); i++) {
      XSSFRow r = overall.createRow((i + 1));

      XSSFCell c = r.createCell(0);
      c.setCellValue(themes.get(i).getName());

      XSSFCell c1 = r.createCell(1);
      c1.setCellValue(themes.get(i).getTotalOccurs());

      XSSFCell c2 = r.createCell(2);
      c2.setCellValue(calculatePrevalence(themes.get(i).getTotalOccurs(), lineCount));
    }

    // This could be done in the previous loop but since we don't need
    // indices as much, we may as well use the cleaner for each loop

    for (Theme t : themes) {
      XSSFSheet themeSheet = workbook.createSheet(t.getName());
      XSSFRow row1 = themeSheet.createRow(0);

      XSSFCell keyword = row1.createCell(0);
      keyword.setCellValue("Keyword");
      keyword.setCellStyle(topStyle);

      XSSFCell occ = row1.createCell(1);
      occ.setCellValue("Occurrences");
      occ.setCellStyle(topStyle);

      XSSFCell themePrev = row1.createCell(2);
      themePrev.setCellValue("Prevalence");
      themePrev.setCellStyle(topStyle);

      for (int i = 0; i < t.getKeywords().size(); i++) {
        Keyword k = t.getKeywords().get(i);
        XSSFRow r = themeSheet.createRow((i + 1));

        XSSFCell c = r.createCell(0);
        c.setCellValue(k.getName());

        XSSFCell c1 = r.createCell(1);
        c1.setCellValue(k.getNumOccurs());

        XSSFCell c2 = r.createCell(2);
        c2.setCellValue(calculatePrevalence(k.getNumOccurs(), t.getTotalOccurs()));
      }
    }

    FileOutputStream output = new FileOutputStream(docName);
    workbook.write(output);
    output.close();
  }
예제 #13
0
파일: OoxmlUtil.java 프로젝트: zhangrui1/SK
 /**
  * セルに文字列を出力する
  *
  * @param cell 対象セル
  * @param object 出力データ
  * @param style セルスタイル
  * @param zeroValue 値が0の時に設定する値
  */
 private static void setData(XSSFCell cell, Object object, XSSFCellStyle style, String zeroValue) {
   if (style != null) {
     cell.setCellStyle(style);
   }
   if (object instanceof String) {
     cell.setCellType(XSSFCell.CELL_TYPE_STRING);
     cell.setCellValue((String) object);
   } else if (object instanceof Integer) {
     Integer integer = (Integer) object;
     if (0 == integer) {
       cell.setCellType(XSSFCell.CELL_TYPE_STRING);
       cell.setCellValue(zeroValue);
     } else {
       cell.setCellType(XSSFCell.CELL_TYPE_NUMERIC);
       cell.setCellValue((Integer) object);
     }
   } else if (object instanceof Double) {
     cell.setCellType(XSSFCell.CELL_TYPE_NUMERIC);
     if (Double.isNaN((Double) object)) {
       cell.setCellValue(zeroValue);
     } else {
       Double value = (Double) object;
       if (0 == value.compareTo((Double) 0.0)) {
         cell.setCellValue(zeroValue);
       } else {
         cell.setCellValue((Double) object);
       }
     }
   }
 }
예제 #14
0
파일: OoxmlUtil.java 프로젝트: zhangrui1/SK
 /**
  * 指定セルのセルスタイルを取得
  *
  * @param sheet シート
  * @param nRow 行番号
  * @param nColumn 列番号
  * @return <b>CellStyle</b>
  */
 public static XSSFCellStyle getCellStyle(XSSFSheet sheet, int nRow, int nColumn) {
   assert sheet != null;
   XSSFRow row = getRowAnyway(sheet, nRow);
   XSSFCell cell = getCellAnyway(row, nColumn);
   return cell.getCellStyle();
 }
예제 #15
0
파일: OoxmlUtil.java 프로젝트: zhangrui1/SK
  /**
   * 罫線スタイルの<b>CellStyle</b>を生成 四角の範囲に周囲太線、中は細線を描画する
   *
   * @param workbook ワークブック
   * @param sheet シート
   * @param nRowStart 開始行
   * @param nRowEnd       終了行
   * @param nColumnStart       開始列
   * @param nColumnEnd       終了列
   * @param isBorder 罫線描画フラグ
   * @param styleMap 罫線style
   */
  public static void setTableDataCellStyle(
      XSSFWorkbook workbook,
      XSSFSheet sheet,
      int nRowStart,
      int nRowEnd,
      int nColumnStart,
      int nColumnEnd,
      boolean isBorder,
      Map<String, XSSFCellStyle> styleMap) {
    assert sheet != null;

    // Range内のすべてセルに罫線を描画
    for (int rIndex = nRowStart; rIndex <= nRowEnd; rIndex++) {
      XSSFRow row = getRowAnyway(sheet, rIndex);
      for (int cIndex = nColumnStart; cIndex <= nColumnEnd; cIndex++) {
        XSSFCell cell = getCellAnyway(row, cIndex);
        cell.setCellStyle(styleMap.get("normal"));
      }
    }
    // 初行のTopのみ太罫線
    XSSFRow row = getRowAnyway(sheet, nRowStart);

    XSSFCell cell = getCellAnyway(row, nColumnStart);
    cell.setCellStyle(styleMap.get("isTopAndLeft"));
    for (int cIndex = nColumnStart + 1; cIndex < nColumnEnd; cIndex++) {
      cell = getCellAnyway(row, cIndex);
      cell.setCellStyle(styleMap.get("isTop"));
    }
    cell = getCellAnyway(row, nColumnEnd);
    cell.setCellStyle(styleMap.get("isTopAndRight"));

    // 間の行
    for (int cIndexCenter = nRowStart + 1; cIndexCenter < nRowEnd; cIndexCenter++) {
      row = getRowAnyway(sheet, cIndexCenter);

      cell = getCellAnyway(row, nColumnStart);
      cell.setCellStyle(styleMap.get("isLeft"));

      cell = getCellAnyway(row, nColumnEnd);
      cell.setCellStyle(styleMap.get("isRight"));
    }

    // 最後の行のBottomのみ太罫線
    XSSFRow rowEnd = getRowAnyway(sheet, nRowEnd);
    cell = getCellAnyway(rowEnd, nColumnStart);
    cell.setCellStyle(styleMap.get("isBottomAndLeft"));

    for (int cIndex = nColumnStart + 1; cIndex < nColumnEnd; cIndex++) {
      cell = getCellAnyway(rowEnd, cIndex);
      cell.setCellStyle(styleMap.get("isBottom"));
    }
    cell = getCellAnyway(rowEnd, nColumnEnd);
    cell.setCellStyle(styleMap.get("isBottomAndRight"));

    //        CellRangeAddress region=new
    // CellRangeAddress(nRowStart,nRowEnd,nColumnStart,nColumnEnd);
    //        short border=XSSFCellStyle.BORDER_MEDIUM;//太罫線
    //        RegionUtil.setBorderTop(border,region,sheet,workbook);
    //        RegionUtil.setBorderBottom(border,region,sheet,workbook);
    //        RegionUtil.setBorderLeft(border, region, sheet, workbook);
    //        RegionUtil.setBorderRight(border, region, sheet, workbook);

  }