現在、参画している案件でJavaを用いて開発を行っています。
その際Java上でExcelのセルに色を付ける・セルに線を引く・セルを結合する、といったことを行いました。
復習として自身の勉強のために記録として残しておきます。(数時間クオリティですので、その点はご容赦ください)
メインメソッド
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);
}
表を作るための各メソッドを用意しました。
これらを実行すると
このようにExcel上に表を作り出すことができます。ですがこれくらいの表なら明らかにExcelで書いたほうが早いですね・・・
本来であればDB上のデータを取得して最終的に表を作り出すので、知っておいて損は無いかと思います。
以上、Java上でExcelに簡単な表を作り出してみました。改めて自分で書いたコードを見返すとスタイリッシュでは無いなと感じます。実装の仕方にも色んな方法があるのもJavaの面白いところですね。
また時間があるときにまとめていこうと思います。