/excel-io

Object-oriented java Excel library

Primary LanguageJavaMIT LicenseMIT

Excel-io

Java excel library (Apache POI inside)

EO principles respected here DevOps By Rultor.com

Build Status Javadocs Maven Central License

Test Coverage SonarQube

This is an object-oriented java library for reading and writing Microsoft Office Excel spreadsheets. It is a wrapper around Apache POI that provides elegant and user friendly interface for creating Excel documents.

How to use. Latest version here

<dependency>
    <groupId>hr.com.vgv</groupId>
    <artifactId>excel-io</artifactId>
</dependency>

Java version required: 1.8+.

Create spreadsheet

new XsWorkbook(
    new XsSheet(
        new XsRow()
            .with(new TextCells("name", "email", "salary", "bonus", "total"))
            .with(
                new XsStyle(
                    new ForegroundColor(IndexedColors.GREY_25_PERCENT.getIndex()),
                    new FillPattern(FillPatternType.SOLID_FOREGROUND)
                )
            ),
        new XsRow()
            .with(new TextCells("Steve Hook", "steve.hook@gmail.com"))
            .with(new NumberCells(160000.0, 35337.6))
            .with(new FormulaCell("SUM(C3:D3)")
                .with(
                    new XsStyle(
                        new ForegroundColor(IndexedColors.RED.getIndex()),
                        new FillPattern(FillPatternType.SOLID_FOREGROUND)
                    )
                )
            )
            .with(new XsProps<>(new Height((short) 500)))
    )
).saveTo("Test.xlsx");

This is how the result looks like:

Read and modify spreadsheet

Read from "Test.xlsx" file and modify cell int the second row/first column.

new XsWorkbook("Test.xlsx")
    .with(new XsSheet.ReadFrom(0)
        .with(
            new XsRow(2,
                new TextCell(1, "UPDATED")
            )
        )
    ).saveTo("Updated.xlsx");

Custom styles

You can create custom cells/rows/sheets:

new XsWorkbook(
    new XsSheet(
        new MyCustomRow("Boris", "Miksic", "ID:2450"),
        new MyCustomRow("Mirko", "Mirkic", "ID:1690")
    )
).saveTo("Test.xlsx");

Just extend appropriate template class and pass custom row/cell object to its constructor:

private static class MyCustomRow extends RowTemplate {

    public MyCustomRow(final String name, final String surname, final String id) {
        super(
            new XsRow()
                .with(new TextCells(name, surname))
                .with(new MyGreyCell(new TextCell(id)))
        );
    }
}

private static class MyGreyCell extends CellTemplate {

    public MyGreyCell(final ECell cell) {
        super(cell.with(
            new XsStyle(
                new ForegroundColor(IndexedColors.GREY_25_PERCENT.getIndex()),
                new FillPattern(FillPatternType.SOLID_FOREGROUND)
            )
        ));
    }
}

The result:

Contribution

You can contribute by forking the repo and sending a pull request. Make sure your branch builds without any warnings/issues:

mvn clean install -Pqulice