Write Excel file using Apache POI in Android
build.gradle
implementation 'org.apache.poi:poi:3.17'
MainActivity
Strage Access Framework を使用してExcelファイルを保存しています。
private fun createFile() { val current = LocalDateTime.now() val formatter = DateTimeFormatter.ofPattern("yyyyMMdd_HHmmss") val formatted = current.format(formatter) val fileName = "${formatted}.xlsx" val intent = Intent(Intent.ACTION_CREATE_DOCUMENT) intent.addCategory(Intent.CATEGORY_OPENABLE) intent.type = "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet" intent.putExtra(Intent.EXTRA_TITLE, fileName) startActivityForResult(intent, CREATE_FILE) }
HSSFWorkbook、HSSFSheet、HSSFRow、HSSFCell、でセルを指定します。
セルへの書き込みは hssfCell.setCellValue*1 で行っています。
最後は hssWorkbook.write(outputStream) でExcelファイルを保存しています。
override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) { super.onActivityResult(requestCode, resultCode, data) if (requestCode == CREATE_FILE && resultCode == Activity.RESULT_OK) { if (data != null) { var uri: Uri? = data.data var hssfWorkbook: HSSFWorkbook = HSSFWorkbook() var hssfSheet: HSSFSheet = hssfWorkbook.createSheet() var count: Int = 0 for (y in 0..5) { var hssfRow: HSSFRow = hssfSheet.createRow(y) for (x in 0..5) { var hssfCell: HSSFCell = hssfRow.createCell(x) hssfCell.setCellValue((count++).toString()) } } try { if(uri != null) { applicationContext.contentResolver.openOutputStream(uri).use { outputStream -> hssfWorkbook.write(outputStream) } } } catch (e: Exception) { e.printStackTrace() } } } }
参考資料
How to create an Excel file from your Android App? - YouTube
[Android] Storage Access Framework でドキュメントを保存する
*1:count++).toString(