Dynamic Grid Sample


The example shows how to output a grid with dynamic number of columns/rows using Grid Command.

The example can be found in org.jxls.demo.GridCommandDemo class at jxls-demo project

In this example we will use the following simple Java bean

public class Employee {
    private String name;
    private Date birthDate;
    private BigDecimal payment;
    private BigDecimal bonus;
    // constructors and getters/setters

Report template

The report template for this example looks like this

Grid Command template

It defines the Grid-Command in cell A3 using the following cell comment

jx:grid(lastCell="A4" headers="headers" data="data" areas=[A3:A3, A4:A4] formatCells="BigDecimal:C1,Date:D1")

Here the header area is A3:A3 and the data area is A4:A4.

And the body of the command in the template file contains the following two cells


Java code

The example uses Jxls POI adapter to generate the report. The Java code looks like this

private static void executeGridObjectListDemo(List<Employee> employees) throws IOException {
    try(InputStream is = GridCommandDemo.class.getResourceAsStream("grid_template.xls")) {
        try(OutputStream os = new FileOutputStream("target/grid_output2.xls")) {
            Context context = new Context();
            context.putVar("headers", Arrays.asList("Name", "Birthday", "Payment"));
            context.putVar("data", employees);
            JxlsHelper.getInstance().processGridTemplateAtCell(is, os, context, "name,birthDate,payment", "Sheet2!A1");

The list of headers is set like this

context.putVar("headers", Arrays.asList("Name", "Birthday", "Payment"));

And the data for grid body is a list of Employee objects.

    context.putVar("data", employees);

And we pass Employee object property names to be used for the grid to processGridTemplateAtCell method

    JxlsHelper.getInstance().processGridTemplateAtCell(is, os, context, "name,payment,birthDate", "Sheet2!A1");

Excel output

Final for this example is shown on the following screenshots


Grid output - Sheet1


Grid output - Sheet2