Skip to content

Commit a5f8a1b

Browse files
committed
- Added addSheet functionality (keepFile parameter)
- Updated WorkBook factory as it was previously incompatible with reusing existing workbook - Revised test use generated random data Signed-off-by: LeandroC89 <[email protected]>
1 parent 27c6396 commit a5f8a1b

File tree

2 files changed

+28
-27
lines changed
  • dataframe-excel/src
    • main/kotlin/org/jetbrains/kotlinx/dataframe/io
    • test/kotlin/org/jetbrains/kotlinx/dataframe/io

2 files changed

+28
-27
lines changed

dataframe-excel/src/main/kotlin/org/jetbrains/kotlinx/dataframe/io/xlsx.kt

Lines changed: 24 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -4,23 +4,12 @@ import kotlinx.datetime.toJavaLocalDate
44
import kotlinx.datetime.toJavaLocalDateTime
55
import kotlinx.datetime.toKotlinLocalDateTime
66
import org.apache.poi.hssf.usermodel.HSSFWorkbook
7-
import org.apache.poi.ss.usermodel.Cell
8-
import org.apache.poi.ss.usermodel.CellType
9-
import org.apache.poi.ss.usermodel.DateUtil
10-
import org.apache.poi.ss.usermodel.RichTextString
11-
import org.apache.poi.ss.usermodel.Row
12-
import org.apache.poi.ss.usermodel.Sheet
13-
import org.apache.poi.ss.usermodel.Workbook
14-
import org.apache.poi.ss.usermodel.WorkbookFactory
7+
import org.apache.poi.ss.usermodel.*
158
import org.apache.poi.ss.util.CellReference
169
import org.apache.poi.util.LocaleUtil
1710
import org.apache.poi.util.LocaleUtil.getUserTimeZone
1811
import org.apache.poi.xssf.usermodel.XSSFWorkbook
19-
import org.jetbrains.kotlinx.dataframe.AnyFrame
20-
import org.jetbrains.kotlinx.dataframe.AnyRow
21-
import org.jetbrains.kotlinx.dataframe.ColumnsSelector
22-
import org.jetbrains.kotlinx.dataframe.DataColumn
23-
import org.jetbrains.kotlinx.dataframe.DataFrame
12+
import org.jetbrains.kotlinx.dataframe.*
2413
import org.jetbrains.kotlinx.dataframe.api.dataFrameOf
2514
import org.jetbrains.kotlinx.dataframe.api.forEach
2615
import org.jetbrains.kotlinx.dataframe.api.select
@@ -32,8 +21,7 @@ import java.io.OutputStream
3221
import java.net.URL
3322
import java.time.LocalDate
3423
import java.time.LocalDateTime
35-
import java.util.Calendar
36-
import java.util.Date
24+
import java.util.*
3725

3826
public class Excel : SupportedFormat {
3927
override fun readDataFrame(stream: InputStream, header: List<String>): AnyFrame = DataFrame.readExcel(stream)
@@ -216,9 +204,10 @@ public fun <T> DataFrame<T>.writeExcel(
216204
columnsSelector: ColumnsSelector<T, *> = { all() },
217205
sheetName: String? = null,
218206
writeHeader: Boolean = true,
219-
workBookType: WorkBookType = WorkBookType.XLSX
207+
workBookType: WorkBookType = WorkBookType.XLSX,
208+
keepFile: Boolean = false,
220209
) {
221-
return writeExcel(File(path), columnsSelector, sheetName, writeHeader, workBookType)
210+
return writeExcel(File(path), columnsSelector, sheetName, writeHeader, workBookType, keepFile)
222211
}
223212

224213
public enum class WorkBookType {
@@ -230,12 +219,23 @@ public fun <T> DataFrame<T>.writeExcel(
230219
columnsSelector: ColumnsSelector<T, *> = { all() },
231220
sheetName: String? = null,
232221
writeHeader: Boolean = true,
233-
workBookType: WorkBookType = WorkBookType.XLSX
222+
workBookType: WorkBookType = WorkBookType.XLSX,
223+
keepFile: Boolean = false,
234224
) {
235-
val factory = when (workBookType) {
236-
WorkBookType.XLS -> { { HSSFWorkbook() } }
237-
WorkBookType.XLSX -> { { XSSFWorkbook() } }
238-
}
225+
226+
val factory =
227+
if (keepFile){
228+
when (workBookType) {
229+
WorkBookType.XLS -> HSSFWorkbook(file.inputStream())
230+
WorkBookType.XLSX -> XSSFWorkbook(file.inputStream())
231+
}
232+
}
233+
else {
234+
when (workBookType) {
235+
WorkBookType.XLS -> HSSFWorkbook()
236+
WorkBookType.XLSX -> XSSFWorkbook()
237+
}
238+
}
239239
return file.outputStream().use {
240240
writeExcel(it, columnsSelector, sheetName, writeHeader, factory)
241241
}
@@ -246,9 +246,9 @@ public fun <T> DataFrame<T>.writeExcel(
246246
columnsSelector: ColumnsSelector<T, *> = { all() },
247247
sheetName: String? = null,
248248
writeHeader: Boolean = true,
249-
factory: () -> Workbook
249+
factory: Workbook
250250
) {
251-
val wb: Workbook = factory()
251+
val wb: Workbook = factory
252252
writeExcel(wb, columnsSelector, sheetName, writeHeader)
253253
wb.write(outputStream)
254254
wb.close()

dataframe-excel/src/test/kotlin/org/jetbrains/kotlinx/dataframe/io/XlsxTest.kt

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -111,12 +111,13 @@ class XlsxTest {
111111
}
112112

113113
@Test
114-
fun `write to new sheet when erase is false`() {
115-
val df = DataFrame.readExcel(testResource("sample4.xls"), skipRows = 6, rowsCount = 1)
114+
fun `write to new sheet when keepFile is true`() {
115+
val names = (1..5).map { "column$it" }
116+
val df = dataFrameOf(names).randomDouble(7)
116117
val fileLoc = testResource("generated_wb.xlsx").toURI().toString().removeRange(0, 6)
117118

118119
df.writeExcel(fileLoc, sheetName = "TestSheet1")
119-
df.writeExcel(fileLoc, sheetName = "TestSheet2")
120+
df.writeExcel(fileLoc, sheetName = "TestSheet2", keepFile = true)
120121

121122
val testSheet1Df = DataFrame.readExcel(testResource("generated_wb.xlsx"), sheetName = "TestSheet1")
122123
val testSheet2Df = DataFrame.readExcel(testResource("generated_wb.xlsx"), sheetName = "TestSheet2")

0 commit comments

Comments
 (0)