Существует ли оболочка Scala для Apache POI? - PullRequest
19 голосов
/ 17 февраля 2011

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

Ответы [ 6 ]

13 голосов
/ 21 сентября 2011

Благодаря ответу Дейва Гриффита, я взломал нечто похожее на его 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")

Код можно найти здесь .

10 голосов
/ 20 апреля 2014

Учитывая отсутствие расширенных оболочек электронных таблиц с открытым исходным кодом для 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")
  }
} 
5 голосов
/ 30 мая 2011

Необычные POI - Кажется, не так много информации, но я думаю, это то, что вы ищете.

4 голосов
/ 30 мая 2011

Это совершенно бесполезно, но я взломал Scala-ish DSL для POI.Он допускает код вроде

Workbook{
  Sheet("Multiplication"){
      for(i<-1 to 10){
         Row{
           for(j<-1 to 10){
             Cell(i*j)
           }
         }
      }
  }
}.writeToFile("multiplication.xls")

К сожалению, я не могу выдать его без проверки с моим боссом, но, честно говоря, это было не так сложно сделать.Вы должны иметь возможность без особых проблем реконструировать большую часть этого примера.

2 голосов
/ 14 сентября 2011

Если вы пишете Office XML, вы можете избегать POI и создавать XML напрямую (плюс архивировать его вместе). Для простых электронных таблиц это сделать довольно просто, и вы исключаете множество переменных.

Обратите внимание, что с поддержкой POI OOXML вам необходимо использовать режим потоковой передачи, если вы собираетесь создавать большие электронные таблицы (более 65 000 строк).

1 голос
/ 18 февраля 2011

Я не знаю ни одной библиотеки Scala для такого рода инкапсуляции.

Большинство вопросов об использовании Apache POI об итераторах .
И проект alexcheng импортирует документ Excel и имеет контрольный пример .
Но это все.

...