2015-06-04 77 views
0

根據文檔,我們應該能夠加載帶樣式的模板,向其中寫入數據,然後輸出結果數據+樣式。但是,我們寫入的每個單元格都從模板中刪除了其格式,因此只有未寫入的單元格才具有格式。我們不能使用「添加」方法,因爲我們沒有具有相應屬性的域對象列表,我們有任意數組的數據。Grails excel-export覆蓋模板樣式

OutputStream outputStream = new ByteArrayOutputStream() 
WebXlsxExporter xlsxExporter = new WebXlsxExporter(servletContext.getRealPath("/reporting/report_template.xlsx")) 
xlsxExporter.putCellValue(0, 0, reportSchedule.report.title) 
xlsxExporter.putCellValue(0, 3, new Date()) 
xlsxExporter.putCellValue(0, 6, response.time + "ms") 

if (! response.rows.isEmpty()) { 
    int row = 1 
    headers = response.rows[0].keySet(); 

    headers.eachWithIndex() {item, i -> 
     xlsxExporter.putCellValue(row, i, item.value.toString()) 
    }; 
    row++ 

    response.rows.each {line -> 
     line.eachWithIndex { item, int i -> 
      xlsxExporter.putCellValue(row, i, item.value.toString()) 
     } 
     row++ 
    } 
} else { 
    xlsxExporter.putCellValue(2,1, "No Data") 
} 
xlsxExporter.save(outputStream) 

回答

0

這可能將是非常通用的,我對此感到抱歉提前然而這可能只是「備份」每個單元格樣式你寫的價值之前,恢復風格一旦你完成了寫作?基本上你會做

def cellStyle = xlsxReporter.getCellAt(row, i).getCellStyle() 
xlsxExporter.putCellValue(row, i, item.value.toString()) 
xlsxReporter.getCellAt(row, i).setCellStyle(cellStyle) 
+0

感謝您的答覆。我實際上嘗試過,但getCellAt在putCellValue之前調用它時會拋出一個空指針異常。我試過在setCellStyle後面再次調用putCellValue,但是這也沒做任何事。 –