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: