是否有针对Apache POI的Scala包装器?

时间:2011-02-17 17:06:16

标签: excel scala apache-poi

我想使用Apache POI在Scala应用程序中读取/创建Excel文件。当然,我可以直接使用POI库,毕竟它是Java,但我想让Scala感觉到。那么是否有一个Scala包装器带来了Scala的感觉(使用隐式转换),即某种“Scala-POI-DSL”免费提供?

6 个答案:

答案 0 :(得分:13)

感谢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")

可以找到代码here

答案 1 :(得分:10)

鉴于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")
  }
} 

答案 2 :(得分:5)

Fancy POI - 似乎找不到太多信息,但我想这正是你要找的。

答案 3 :(得分:4)

这完全没有用,但我为POI攻击了Scala-ish DSL。它允许像

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

可悲的是,如果不与老板核实,我不能放弃,但说实话,这并不难。您应该能够从该示例中对大部分内容进行逆向工程而不会有太多麻烦。

答案 4 :(得分:2)

如果您正在编写Office XML,则可以考虑避免使用POI并直接创建XML(以及将其一起存档)。对于简单的电子表格来说,这样做非常简单,而且你消除了很多变量。

请注意,如果您打算创建大型电子表格(超过65,000行),则使用POI的OOXML支持时,您需要使用其流式传输模式。

答案 5 :(得分:1)

我不知道任何Scala库的这种封装。

关于使用apache POI的大多数问题都是about iteratorsalexcheng project执行import an Excel document,并且test case 但就是这样。