Basic Read and Write Excel Using Kotlin
This post is a very simple example of reading and writing to Excel using Kotlin. Thanks to its Java interoperability, we can utilize the Apache POI library.
1. Maven pom.xml
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://maven.apache.org/POM/4.0.0"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.developersoapbox</groupId>
<artifactId>kotlin-excel-demo</artifactId>
<version>1.0-SNAPSHOT</version>
<packaging>jar</packaging>
<name>com.developersoapbox kotlin-excel-demo</name>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<kotlin.version>1.2.20</kotlin.version>
<junit.version>4.12</junit.version>
</properties>
<dependencies>
<dependency>
<groupId>org.jetbrains.kotlin</groupId>
<artifactId>kotlin-stdlib</artifactId>
<version>${kotlin.version}</version>
</dependency>
<dependency>
<groupId>org.jetbrains.kotlin</groupId>
<artifactId>kotlin-test-junit</artifactId>
<version>${kotlin.version}</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>${junit.version}</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi</artifactId>
<version>3.17</version>
</dependency>
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi-ooxml</artifactId>
<version>3.17</version>
</dependency>
</dependencies>
<build>
<sourceDirectory>src/main/kotlin</sourceDirectory>
<testSourceDirectory>src/test/kotlin</testSourceDirectory>
<plugins>
<plugin>
<groupId>org.jetbrains.kotlin</groupId>
<artifactId>kotlin-maven-plugin</artifactId>
<version>${kotlin.version}</version>
<executions>
<execution>
<id>compile</id>
<phase>compile</phase>
<goals>
<goal>compile</goal>
</goals>
</execution>
<execution>
<id>test-compile</id>
<phase>test-compile</phase>
<goals>
<goal>test-compile</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
</project>
2. Main.kt
package com.developersoapbox
import org.apache.poi.ss.usermodel.WorkbookFactory
import org.apache.poi.xssf.usermodel.XSSFWorkbook
import java.io.FileInputStream
import java.io.FileOutputStream
/**
* Writes the value "TEST" to the cell at the first row and first column of worksheet.
*/
fun writeToExcelFile(filepath: String) {
//Instantiate Excel workbook:
val xlWb = XSSFWorkbook()
//Instantiate Excel worksheet:
val xlWs = xlWb.createSheet()
//Row index specifies the row in the worksheet (starting at 0):
val rowNumber = 0
//Cell index specifies the column within the chosen row (starting at 0):
val columnNumber = 0
//Write text value to cell located at ROW_NUMBER / COLUMN_NUMBER:
xlWs.createRow(rowNumber).createCell(columnNumber).setCellValue("TEST")
//Write file:
val outputStream = FileOutputStream(filepath)
xlWb.write(outputStream)
xlWb.close()
}
/**
* Reads the value from the cell at the first row and first column of worksheet.
*/
fun readFromExcelFile(filepath: String) {
val inputStream = FileInputStream(filepath)
//Instantiate Excel workbook using existing file:
var xlWb = WorkbookFactory.create(inputStream)
//Row index specifies the row in the worksheet (starting at 0):
val rowNumber = 0
//Cell index specifies the column within the chosen row (starting at 0):
val columnNumber = 0
//Get reference to first sheet:
val xlWs = xlWb.getSheetAt(0)
println(xlWs.getRow(rowNumber).getCell(columnNumber))
}
fun main(args: Array<String>) {
val filepath = "./test.xlsx"
writeToExcelFile(filepath)
readFromExcelFile(filepath)
}