Я хотел бы использовать POI Apache для чтения/создания файлов Excel в приложении Scala. Конечно, я могу использовать библиотеку POI напрямую, это Java в конце концов, но я хотел бы иметь чувство Scala. Итак, существует ли оболочка Scala, приносящая ощущение Scala (с использованием неявных преобразований), т.е. Доступный какой-либо "Scala -POI-DSL"?
Существует ли оболочка Scala для Apache POI?
Ответ 1
Необычная POI - Не похоже, чтобы информация была найдена, но я думаю, что это то, что вы ищете.
Ответ 2
Спасибо Dave Griffith ответ, я взломал что-то похожее на его DSL.
Workbook {
Sheet("name") {
Row(1) {
Cell(1, "data") :: Cell(2, "data2") :: Nil
} ::
Row(2) {
Cell(1, "data") :: Cell(2, "data2") :: Nil
} :: Nil
} ::
Sheet("name2") {
Row(2) {
Cell(1, "data") :: Cell(2, "data2") :: Nil
} :: Nil
} :: Nil
}.save("/home/path/ok.xls")
Код можно найти здесь.
Ответ 3
Учитывая отсутствие расширенных обложек электронных таблиц с открытым исходным кодом для Scala, я начал разработку Spoiwo: https://github.com/norbert-radyk/spoiwo. Он позволяет генерировать XSSFWorkbook и поддерживает значительный набор функций POI.
Для этого по-прежнему требуется небольшая документация, но ниже приведено приблизительное представление о его возможностях:
Пример простой таблицы с использованием Spoiwo:
object GettingStartedExample {
val headerStyle =
CellStyle(fillPattern = CellFill.Solid, fillForegroundColor = Color.AquaMarine, fillBackgroundColor = Color.AquaMarine, font = Font(bold = true))
val gettingStartedSheet = Sheet(name = "Some serious stuff")
.withRows(
Row(style = headerStyle).withCellValues("NAME", "BIRTH DATE", "DIED AGED", "FEMALE"),
Row().withCellValues("Marie Curie", new LocalDate(1867, 11, 7), 66, true),
Row().withCellValues("Albert Einstein", new LocalDate(1879, 3, 14), 76, false),
Row().withCellValues("Erwin Shrodinger", new LocalDate(1887, 8, 12), 73, false)
)
.withColumns(
Column(index = 0, style = CellStyle(font = Font(bold = true)), autoSized = true)
)
def main(args: Array[String]) {
gettingStartedSheet.saveAsXlsx("C:\\Reports\\getting_started.xlsx")
}
}
Ответ 4
Это совершенно бесполезно, но я взломал DSL Scala -ish для POI. Он позволяет использовать код, например
Workbook{
Sheet("Multiplication"){
for(i<-1 to 10){
Row{
for(j<-1 to 10){
Cell(i*j)
}
}
}
}
}.writeToFile("multiplication.xls")
К сожалению, я не могу его выдать, не проверив моего босса, но, честно говоря, это было не так сложно. Вы должны иметь возможность реконструировать большую часть из этого примера без особых проблем.
Ответ 5
Если вы пишете Office XML, вы можете подумать об избежании POI и создании XML напрямую (плюс архивирование вместе). Для простых электронных таблиц это довольно просто сделать, и вы устраняете множество переменных.
Обратите внимание, что при поддержке POI OOXML вам нужно будет использовать свой потоковый режим, если вы намереваетесь создавать большие электронные таблицы (более 65 тыс. строк).
Ответ 6
Я не знаю никакой библиотеки Scala для такого рода инкапсуляции.
Большинство вопросов об использовании apache POI об итераторах.
И alexcheng project импортировать документ Excel, и имеет тестовый пример.
Но об этом.