Ответ 1
Необычная POI - Не похоже, чтобы информация была найдена, но я думаю, что это то, что вы ищете.
Я хотел бы использовать POI Apache для чтения/создания файлов Excel в приложении Scala. Конечно, я могу использовать библиотеку POI напрямую, это Java в конце концов, но я хотел бы иметь чувство Scala. Итак, существует ли оболочка Scala, приносящая ощущение Scala (с использованием неявных преобразований), т.е. Доступный какой-либо "Scala -POI-DSL"?
Необычная POI - Не похоже, чтобы информация была найдена, но я думаю, что это то, что вы ищете.
Спасибо 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")
Код можно найти здесь.
Учитывая отсутствие расширенных обложек электронных таблиц с открытым исходным кодом для 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")
}
}
Это совершенно бесполезно, но я взломал DSL Scala -ish для POI. Он позволяет использовать код, например
Workbook{
Sheet("Multiplication"){
for(i<-1 to 10){
Row{
for(j<-1 to 10){
Cell(i*j)
}
}
}
}
}.writeToFile("multiplication.xls")
К сожалению, я не могу его выдать, не проверив моего босса, но, честно говоря, это было не так сложно. Вы должны иметь возможность реконструировать большую часть из этого примера без особых проблем.
Если вы пишете Office XML, вы можете подумать об избежании POI и создании XML напрямую (плюс архивирование вместе). Для простых электронных таблиц это довольно просто сделать, и вы устраняете множество переменных.
Обратите внимание, что при поддержке POI OOXML вам нужно будет использовать свой потоковый режим, если вы намереваетесь создавать большие электронные таблицы (более 65 тыс. строк).
Я не знаю никакой библиотеки Scala для такого рода инкапсуляции.
Большинство вопросов об использовании apache POI об итераторах.
И alexcheng project импортировать документ Excel, и имеет тестовый пример.
Но об этом.