2015-02-24 60 views
2

如何从Play Framework v2.x(Scala)生成Excell报告。我发现有一个Play-Excel模块,但它支持PlayFramework v1.0。有没有适合v2.x的东西?Excel Writer Module for Play Framework v2.x

+2

我想你将不得不使用apche的POI,写自己,或者你可以使用'dynamicreports'(http://www.dynamicreports.org),并出口到XLS - HTTP://www.dynamicreports .org/examples/excelreport1 – 2015-02-24 11:39:32

+0

感谢您的回复!我有什么需要使用Apache Poi自行编写的? – 2015-02-24 11:53:24

+2

Poi提供低级别的API来创建具有极大灵活性和控制力的Excel文档,但您也可以查看'dynamicreports'选项。 – 2015-02-24 12:14:34

回答

1

最后我选择使用Spoiwo. Scala Wrapper for Apache POI。它有一个简洁的入门指南。但是,PlayFramework没有例子。

这是我的快速和肮脏的黑客从案例类生成简单的报告。

def generateReportXLSX(waybillId: Long) = Action{ implicit request => 

    val headerStyle = 
     CellStyle(fillPattern = CellFill.Solid, fillForegroundColor = Color.DarkGrey, fillBackgroundColor = Color.AquaMarine, font = Font(bold = true)) 

    val listItems: List[Item] = Items.findByWaybillId(waybillId) 

    val listRows = listItems.map{ item => 
     Row().withCellValues(item.id.getOrElse(1), item.itemCode, item.senderName.getOrElse("")) 
    } 

    val gettingStartedSheet = Sheet(name = "Накладная ") 
     .withRows(listRows) 
     .withColumns(
     Column(index = 0, style = CellStyle(font = Font(bold = true)), autoSized = true) 
    ) 

    gettingStartedSheet.saveAsXlsx("/home/user/dumps/"+waybillId+".xlsx") 

    Ok.sendFile(new File(("/home/user/dumps/"+waybillId+".xlsx"))) 

    } 
+0

感谢分享答案 – Benoit 2016-12-12 14:51:14

+0

您可以添加onClose触发器来删除临时文件。 'on onClose():Unit = new File(tmpFile).delete()Ok.sendFile(new File(tmpFile),onClose = onClose)' – mgosk 2018-01-07 22:12:00