Подтвердить что ты не робот

Существует ли оболочка Scala для Apache POI?

Я хотел бы использовать POI Apache для чтения/создания файлов Excel в приложении Scala. Конечно, я могу использовать библиотеку POI напрямую, это Java в конце концов, но я хотел бы иметь чувство Scala. Итак, существует ли оболочка Scala, приносящая ощущение Scala (с использованием неявных преобразований), т.е. Доступный какой-либо "Scala -POI-DSL"?

4b9b3361

Ответ 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 тыс. строк).