現在のApache POI Excel公式ドキュメント(https://poi.apache.org/components/spreadsheet/index.html) が新旧メソッドが混ざって解説されているなど、分かりづらい部分が多かったためこちらによく使う記述をまとめました。
言語 kotlin
セットアップ
gradlle インストール
build.gradle
dependencies {
/* 2020 8月現在の安定版4.1.2*/
'ApachePOI'
compile("org.apache.poi:poi:4.1.2")
'xlsxファイルを作成する場合は下記poi-ooxmlが必要'
compile("org.apache.poi:poi-ooxml:4.1.2")
}
基本操作
シートの作成
sample.kt
// XSSFWorkbookエンティティを作成
val workBook = XSSFWorkbook()
// エクセルシートを作成
val sheet = workBook.createSheet()
######指定セルに値を記入
sample.kt
// 値を記入するセルを指定する
// createRowで列を指定
val row = sheet.createRow(0)
// createCellで行を指定
val cell = row.createCell(0)
// 値を記入
cell.setCellValue("テスト")
シートの保存
sample.kt
val fileOutputStream = FileOutputStream("test.xlsx")
workBook.write(fileOutputStream)
fileOutputStream.close()
結果
応用操作
セルの色指定
sample.kt
// スタイルインスタンスを作成
val style = workBook.createCellStyle()
// セルを黄色に設定
style.fillForegroundColor = (XSSFColor(byteArrayOf(255.toByte(), 255.toByte(), 204.toByte()), null)
// 塗りつぶしを指定
style.fillPattern = FillPatternType.SOLID_FOREGROUND
//cellにスタイルを設定
cell.setCellStyle(style)
結果
フォントの設定
sample.kt
// フォントインスタンスを作成
val font = workBook.createFont()
// 文字サイズを設定
font.setFontHeightInPoints(16.toShort())
// 文字種類を設定
font.fontName = "MS Pゴシック"
val style = workBook.createCellStyle()
// スタイルにフォント情報を追加
style.setFont(font)
条件付き書式の設定
sample.kt
val sheet = workBook.createSheet()
// 条件付き書式設定用のインスタンスを生成
val sheetCF: SheetConditionalFormatting = sheet.sheetConditionalFormatting
// 条件を設定 この場合は値が90%以下である事
val rule1 = sheetCF.createConditionalFormattingRule(ComparisonOperator.LT, "90%")
// 上記条件の時に利用するフォントを設定(フォント以外も様々な要素を設定できる)
val font = rule1.createFontFormatting()
// フォントを赤に設定
font.fontColor = XSSFColor(byteArrayOf(255.toByte(), 0.toByte(), 0.toByte()), null)
// 上記条件が有効なセルの範囲を設定(下記の場合はA1セルからA5セルまで)
val range = "A1:A5"
// 範囲は配列内に複数設定できる
val regions = arrayOf(
CellRangeAddress.valueOf(range)
)
// 条件を有効化
sheetCF.addConditionalFormatting(regions, rule1)
#####セルに数式を設定
sample.kt
val sheet = workBook.createSheet()
val row = sheet.createRow(0)
val cell = row.createCell(0)
// A1セル/C1セルの割合を出す数式を作成
val formula = "A1/C1"
// セルに数式を設定
cell.cellFormula = formula
// 数式を有効化する
sheet.setForceFormulaRecalculation(true)