This dead-simple tutorial demonstrates how to render a Microsoft Excel file in Spring.
Bookmark or star the completed version of this tutorial on GitHub: SpringExcelWorkbookExample
Add the following dependencies to build.gradle:
compile('org.springframework.boot:spring-boot-starter-web') compile('org.apache.poi:poi:3.15') compile('org.apache.poi:poi-ooxml:3.15')
Create a controller that returns the object you would like converted to xlsx format. In this case, we’d like to render a list of grades.
@RestController public class GradesController { @RequestMapping( value = "/grades.xlsx", method = RequestMethod.GET, produces = "application/xlsx" ) public ModelAndView listGrades() { return new ModelAndView( new GradesView(), "grades", asList( new Grade("Jimmy", "B+"), new Grade("Kelly", "A-") ) ); } }
public class Grade { private String name; private String grade; ... }
Create the
GradesView
class, which will take the list of grades and render them into aWorkbook
.class GradesView extends AbstractXlsxStreamingView { @Override protected void buildExcelDocument( Map<String, Object> model, Workbook workbook, HttpServletRequest request, HttpServletResponse response ) throws Exception { @SuppressWarnings("unchecked") List<Grade> grades = (List<Grade>) model.get("grades"); Sheet sheet = workbook.createSheet("Grades"); Row headerRow = sheet.createRow(0); headerRow.createCell(0).setCellValue("Name"); headerRow.createCell(1).setCellValue("Grade"); int rowNum = 1; for (Grade grade : grades) { Row valueRow = sheet.createRow(rowNum); valueRow.createCell(0).setCellValue(grade.getName()); valueRow.createCell(1).setCellValue(grade.getGrade()); rowNum++; } } }
And that’s it! Spring will automatically handle writing the modified Workbook
to the response.
Browse the completed code on GitHub: SpringExcelWorkbookExample.