1
0

More than 1 year has passed since last update.

JavaでExcelファイルに簡単な表を作る

Posted at

現在、参画している案件でJavaを用いて開発を行っています。
その際Java上でExcelのセルに色を付ける・セルに線を引く・セルを結合する、といったことを行いました。
復習として自身の勉強のために記録として残しておきます。(数時間クオリティですので、その点はご容赦ください:bow:)

メインメソッド

public static void main(String[] args)throws IOException {
    // 指定のExcelへアクセス
    Workbook workbook = WorkbookFactory.create(new File("C:\\pleiades\\workspace\\excelSample.xlsx"));
    // メソッドを呼び出す
    writeExcelSheet(workbook);
    // 出力後のファイルを指定
    FileOutputStream output = new FileOutputStream("C:\\pleiades\\workspace\\excelFormat.xlsx");
    // ファイルに書き込みして終了
    workbook.write(output);
}

ここからまとめてメソッドを呼びます ↓

private static void writeExcelSheet(Workbook workbook) {
    // Excel上に存在するシートを選択
    Sheet sheet = workbook.getSheet("Sheet1");
    // 全体作成
    writeTable(workbook, sheet);
    writeLeft(sheet);
    writeCenter(sheet);
    writeRight(sheet);
}

「〇×ゲーム」部分書き込みメソッド

private static void writeTable(Workbook workbook, Sheet sheet) {
    // セルを結合
    setCellMerge(sheet, 1, 2, 1, 6);
    // セルに色付け
    setCellColor(workbook, sheet, 1, 1);
    // セルに書き込み
    writeCellWord(sheet, 1, 1, "〇×ゲーム");
}

左縦列作成メソッド

private static void writeLeft(Sheet sheet) {
    // セルを結合
    setCellMerge(sheet, 4, 5, 1, 2);
    setCellMerge(sheet, 6, 7, 1, 2);
    setCellMerge(sheet, 8, 9, 1, 2);
    // セルへ書き込み
    writeCellWord(sheet, 4, 1, "〇");
    writeCellWord(sheet, 6, 1, "×");
    writeCellWord(sheet, 8, 1, "×");
    // セルに線を引く
    setCellLine(sheet, 4, 1);
    setCellLine(sheet, 4, 2);
    setCellLine(sheet, 5, 1);
    setCellLine(sheet, 5, 2);
    setCellLine(sheet, 6, 1);
    setCellLine(sheet, 6, 2);
    setCellLine(sheet, 7, 1);
    setCellLine(sheet, 7, 2);
    setCellLine(sheet, 8, 1);
    setCellLine(sheet, 8, 2);
    setCellLine(sheet, 9, 1);
    setCellLine(sheet, 9, 2);
}

中央列作成メソッド

private static void writeCenter(Sheet sheet) {
    // セルを結合
    setCellMerge(sheet, 4, 5, 3, 4);
    setCellMerge(sheet, 6, 7, 3, 4);
    setCellMerge(sheet, 8, 9, 3, 4);
    // セルへ書き込み
    writeCellWord(sheet, 4, 3, "×");
    writeCellWord(sheet, 6, 3, "〇");
    writeCellWord(sheet, 8, 3, "〇");
    // セルに線を引く
    setCellLine(sheet, 4, 3);
    setCellLine(sheet, 4, 4);
    setCellLine(sheet, 5, 3);
    setCellLine(sheet, 5, 4);
    setCellLine(sheet, 6, 3);
    setCellLine(sheet, 6, 4);
    setCellLine(sheet, 7, 3);
    setCellLine(sheet, 7, 4);
    setCellLine(sheet, 8, 3);
    setCellLine(sheet, 8, 4);
    setCellLine(sheet, 9, 3);
    setCellLine(sheet, 9, 4);
}

右縦列作成メソッド

private static void writeRight(Sheet sheet) {
    // セルを結合
    setCellMerge(sheet, 4, 5, 5, 6);
    setCellMerge(sheet, 6, 7, 5, 6);
    setCellMerge(sheet, 8, 9, 5, 6);
    // セルへ書き込み
    writeCellWord(sheet, 4, 5, "〇");
    writeCellWord(sheet, 6, 5, "×");
    writeCellWord(sheet, 8, 5, "〇");
    // セルに線を引く
    setCellLine(sheet, 4, 5);
    setCellLine(sheet, 4, 6);
    setCellLine(sheet, 5, 5);
    setCellLine(sheet, 5, 6);
    setCellLine(sheet, 6, 5);
    setCellLine(sheet, 6, 6);
    setCellLine(sheet, 7, 5);
    setCellLine(sheet, 7, 6);
    setCellLine(sheet, 8, 5);
    setCellLine(sheet, 8, 6);
    setCellLine(sheet, 9, 5);
    setCellLine(sheet, 9, 6);
}

書き込みメソッド

private static void writeCellWord(Sheet sheet,int rowNumber, int cellNumber, String word) {
    // シートに書き込みを行う
    Row row = sheet.getRow(rowNumber);
    Cell cell = row.getCell(cellNumber);
    cell.setCellValue(word);
}

セル結合メソッド

private static void setCellMerge(Sheet sheet, int row1, int row2, int cell1, int cell2) {
    // セルを結合 縦列 row1,row2 ・ 横列 cell1, cell2 
    sheet.addMergedRegion(new CellRangeAddress(row1, row2, cell1, cell2));
}

色付けメソッド

private static void setCellColor(Workbook workbook, Sheet sheet, int rowNumber, int cellNumber) {
    // セルを指定
    Row row = sheet.getRow(rowNumber);
    Cell cell = row.getCell(cellNumber);
    // 色を付ける
    CellStyle cellstyle = workbook.createCellStyle();
    cellstyle.setFillForegroundColor(IndexedColors.YELLOW.index);
    cellstyle.setFillPattern(FillPatternType.SOLID_FOREGROUND);
    cell.setCellStyle(cellstyle);
}

線引きメソッド

private static void setCellLine(Sheet sheet, int rowNumber, int cellNumber) {
    // セルを指定
    Row row = sheet.getRow(rowNumber);
    Cell cell = row.getCell(cellNumber);
    // 線を引く 指定のセル・セルの線をどこに引くか・線の種類
    CellUtil.setCellStyleProperty(cell, CellUtil.BORDER_TOP, BorderStyle.MEDIUM);
    CellUtil.setCellStyleProperty(cell, CellUtil.BORDER_BOTTOM, BorderStyle.MEDIUM);
    CellUtil.setCellStyleProperty(cell, CellUtil.BORDER_RIGHT, BorderStyle.MEDIUM);
    CellUtil.setCellStyleProperty(cell, CellUtil.BORDER_LEFT, BorderStyle.MEDIUM);
}

表を作るための各メソッドを用意しました。
これらを実行すると
スクリーンショット (7).png
このようにExcel上に表を作り出すことができます。ですがこれくらいの表なら明らかにExcelで書いたほうが早いですね・・・
本来であればDB上のデータを取得して最終的に表を作り出すので、知っておいて損は無いかと思います。

以上、Java上でExcelに簡単な表を作り出してみました。改めて自分で書いたコードを見返すとスタイリッシュでは無いなと感じます。実装の仕方にも色んな方法があるのもJavaの面白いところですね。

また時間があるときにまとめていこうと思います。

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0