The OfficeOpenXML classes in the com-hfg library are still a work in progress but functional Excel .xlsx files can be created.
Xlsx xlsx = new Xlsx();
Workbook workbook = xlsx.getWorkbook();
SsmlWorksheet sheet = workbook.addWorksheet();
SsmlSheetData sheetData = sheet.getSheetData();
sheetData.addRow().addCell("Hello World!");
File testFile = new File("testSimple.xlsx");
xlsx.write(testFile);
The resulting output looks like this:
Xlsx xlsx = new Xlsx();
Workbook workbook = xlsx.getWorkbook();
SsmlWorksheet sheet = workbook.addWorksheet();
SsmlSheetData sheetData = sheet.getSheetData();
sheetData.addRow().addCell("Hello Merged World!");
sheet.mergeCells(new CellRange("A1:C2"));
File testFile = new File("testCellMerge.xlsx");
xlsx.write(testFile);
The resulting output looks like this:
Xlsx xlsx = new Xlsx();
Workbook workbook = xlsx.getWorkbook();
SsmlDifferentialFormat level1Format = new SsmlDifferentialFormat(xlsx);
HTMLColor bgColor = HTMLColor.WHITE;
level1Format.getFont().setColor(bgColor.getContrastingColor());
level1Format.getFill().setBackgroundColor(bgColor);
SsmlDifferentialFormat level2Format = new SsmlDifferentialFormat(xlsx);
bgColor = HTMLColor.valueOf("FF00FF00");
level2Format.getFont().setColor(bgColor.getContrastingColor());
level2Format.getFill().setBackgroundColor(bgColor);
SsmlDifferentialFormat level3Format = new SsmlDifferentialFormat(xlsx);
bgColor = HTMLColor.valueOf("FF00A9FF");
level3Format.getFont().setColor(bgColor.getContrastingColor());
level3Format.getFill().setBackgroundColor(bgColor);
SsmlDifferentialFormat level4Format = new SsmlDifferentialFormat(xlsx);
bgColor = HTMLColor.valueOf("FFAA00FF");
level4Format.getFont().setColor(bgColor.getContrastingColor());
level4Format.getFill().setBackgroundColor(bgColor);
SsmlDifferentialFormat level5Format = new SsmlDifferentialFormat(xlsx);
bgColor = HTMLColor.valueOf("FFFF0000");
level5Format.getFont().setColor(bgColor.getContrastingColor());
level5Format.getFill().setBackgroundColor(bgColor);
SsmlDifferentialFormat level6Format = new SsmlDifferentialFormat(xlsx);
bgColor = HTMLColor.valueOf("FFC00000");
level6Format.getFont().setColor(bgColor.getContrastingColor());
level6Format.getFill().setBackgroundColor(bgColor);
SsmlWorksheet sheet = workbook.addWorksheet();
SsmlSheetData sheetData = sheet.getSheetData();
// Generate some mock data
SsmlRow row = sheetData.addRow();
row.addCell();
row.addCell("A");
row.addCell("B");
row.addCell("C");
row = sheetData.addRow();
row.addCell("A");
row.addCell(100);
row.addCell(75);
row.addCell(80);
row = sheetData.addRow();
row.addCell("B");
row.addCell(40);
row.addCell(100);
row.addCell(60);
row = sheetData.addRow();
row.addCell("C");
row.addCell(92);
row.addCell(83);
row.addCell(100);
// Assign some conditional formatting to a range of cells
SsmlConditionalFormatting conditionalFormatting = sheet.addConditionalFormatting(new CellRange("B2:D4"));
conditionalFormatting.addRule(SsmlCfRuleType.expression)
.setFormat(level1Format)
.setStopIfTrue(true)
.addFormula("ROW()=COLUMN()");
conditionalFormatting.addRule(SsmlCfRuleType.cellIs)
.setFormat(level2Format)
.setStopIfTrue(true)
.setOperator(SsmlCfOperator.between)
.addFormula(90)
.addFormula(100);
conditionalFormatting.addRule(SsmlCfRuleType.cellIs)
.setFormat(level3Format)
.setStopIfTrue(true)
.setOperator(SsmlCfOperator.between)
.addFormula(80)
.addFormula(90);
conditionalFormatting.addRule(SsmlCfRuleType.cellIs)
.setFormat(level4Format)
.setStopIfTrue(true)
.setOperator(SsmlCfOperator.between)
.addFormula(70)
.addFormula(80);
conditionalFormatting.addRule(SsmlCfRuleType.cellIs)
.setFormat(level5Format)
.setStopIfTrue(true)
.setOperator(SsmlCfOperator.between)
.addFormula(60)
.addFormula(70);
conditionalFormatting.addRule(SsmlCfRuleType.cellIs)
.setFormat(level6Format)
.setStopIfTrue(true)
.setOperator(SsmlCfOperator.between)
.addFormula(0)
.addFormula(60);
File testFile = new File("testConditionalFormatting.xlsx");
xlsx.write(testFile);
This resulting output looks like this: