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

現在、参画している案件で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](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2280983/980c72cb-d603-e90f-a150-4a8a46caf780.png)
このようにExcel上に表を作り出すことができます。ですがこれくらいの表なら明らかにExcelで書いたほうが早いですね・・・
本来であればDB上のデータを取得して最終的に表を作り出すので、知っておいて損は無いかと思います。

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

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