2015-02-24 41 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