String xlsPartName = "/ppt/embeddings/Microsoft_Excel_Sheet1.xlsx"; EmbeddedPackagePart epp = (EmbeddedPackagePart) ppt .getParts().get(new PartName(xlsPartName)); InputStream is = BufferUtil.newInputStream(epp.getBuffer()); SpreadsheetMLPackage pkg = (SpreadsheetMLPackage) SpreadsheetMLPackage.load(is); Map partsMap = pkg.getParts().getParts(); Iterator> it = partsMap.entrySet().iterator(); while(it.hasNext()) { Map.Entry pairs = it.next(); logger.info(" Key: " + pairs.getKey() + " value: " + partsMap.get(pairs.getKey())); if (partsMap.get(pairs.getKey()) instanceof WorksheetPart) { WorksheetPart wsp = (WorksheetPart) partsMap.get(pairs.getKey()) ; SheetData sheetData = wsp.getJaxbElement().getSheetData(); List rows = sheetData.getRow(); for (Row row : rows) { List cells = row.getC(); for (Cell cell : cells) { if (cell.getR().equals("B2") && cell.getV() != null) { logger.info("B2 CELL VAL: " + cell.getV()); // change the B2 cell value cell.setV("14.03"); } else if (cell.getR().equals("B3") && cell.getV() != null) { logger.info("B3 CELL VAL: " + cell.getV()); // Change the B3 cell value cell.setV("22.12"); } } } // TODO Is this necessary? spreadSheet.addTargetPart(wsp, AddPartBehaviour.OVERWRITE_IF_NAME_EXISTS); } } // TODO ... update binary data // TODO ... update chart // TODO ... update slide