code: public static void copyRow(XSSFSheet srcSheet, XSSFSheet destSheet, int parentSheetRow, int parentSheetColumn, XSSFRow srcRow, XSSFRow destRow,
  			Map<Integer, CellStyle> styleMap) {
  		// manage a list of merged zone in order to not insert two times a
  		// merged zone
  		Set<CellRangeAddressWrapper> mergedRegions = new TreeSet<CellRangeAddressWrapper>();
  		destRow.setHeight(srcRow.getHeight());
  		// pour chaque row
  		for (int j = srcRow.getFirstCellNum(); j <= srcRow.getLastCellNum(); j++) {
  			XSSFCell oldCell = srcRow.getCell(j); // ancienne cell			
  			if (oldCell != null) {				
  				XSSFCell newCell = destRow.createCell(parentSheetColumn + j);				
  				copyCell(oldCell, newCell, styleMap);
  				
  				CellRangeAddress mergedRegion = getMergedRegion(srcSheet, srcRow.getRowNum(), (short) oldCell.getColumnIndex());
  
  				if (mergedRegion != null) {
  					
  					CellRangeAddress newMergedRegion = new CellRangeAddress(parentSheetRow + mergedRegion.getFirstRow(),
  							parentSheetRow + mergedRegion.getLastRow(), 
  							parentSheetColumn + mergedRegion.getFirstColumn(), 
  							parentSheetColumn + mergedRegion.getLastColumn());
  					
  					CellRangeAddressWrapper wrapper = new CellRangeAddressWrapper(newMergedRegion);
  					if (isNewMergedRegion(wrapper, mergedRegions)) {
  						mergedRegions.add(wrapper);
  						destSheet.addMergedRegion(wrapper.range);
  					}
  				}
  			}
  		}
  
  	}
docs: Copy a row from a sheet to another sheet
  
  
  @param srcSheet the sheet to copy
  @param destSheet the sheet to copy into
  @param parentSheetRow the row inside destSheet where we start to copy
  @param parentSheetColumn the column inside destSheet where we start to copy
  @param srcRow the row to copy
  @param destRow the row to create
  @param styleMap style map