protected List<Cell> copyCells(BandData band, Range templateRange, List<Row> resultSheetRows, Row firstRow, Worksheet resultSheet) { List<Cell> resultCells = new ArrayList<>(); for (int i = 0; i <= templateRange.getLastRow() - templateRange.getFirstRow(); i++) { Range oneRowRange = new Range(templateRange.getSheet(), templateRange.getFirstColumn(), templateRange.getFirstRow() + i, templateRange.getLastColumn(), templateRange.getFirstRow() + i); Map<CellReference, Cell> cellsForOneRowRange = template.getCellsByRange(oneRowRange); List<Cell> templateCells = new ArrayList<>(cellsForOneRowRange.values()); Row templateRow = !templateCells.isEmpty() ? (Row) templateCells.get(0).getParent() : resultSheet.getSheetData().getRow().get(oneRowRange.getFirstRow() - 1); createFakeTemplateCellsForEmptyOnes(oneRowRange, cellsForOneRowRange, templateCells); Row resultRow = resultSheetRows.get((int) (firstRow.getR() + i - 1)); List<Cell> currentRowResultCells = copyCells(templateRange, band, resultRow, templateCells); resultCells.addAll(currentRowResultCells); copyRowSettings(templateRow, resultRow, getWorksheet(templateRow), getWorksheet(resultRow)); } return resultCells; }
public Map<CellReference, Cell> getCellsByRange(Range range) { Worksheet sheet = getSheetByName(range.getSheet()); SheetData data = sheet.getSheetData(); Map<CellReference, Cell> result = new LinkedHashMap<>(); for (int i = 1; i <= data.getRow().size(); i++) { Row row = data.getRow().get(i - 1); if (range.getFirstRow() <= row.getR() && row.getR() <= range.getLastRow()) { List<Cell> c = row.getC(); for (Cell cell : c) { CellReference cellReference = new CellReference(range.getSheet(), cell.getR()); if (range.getFirstColumn() <= cellReference.getColumn() && cellReference.getColumn() <= range.getLastColumn()) { result.put(cellReference, cell); } } } } return result; }
public Map<CellReference, Cell> getCellsByRange(Range range) { Worksheet sheet = getSheetByName(range.getSheet()); SheetData data = sheet.getSheetData(); Map<CellReference, Cell> result = new LinkedHashMap<CellReference, Cell>(); for (int i = 1; i <= data.getRow().size(); i++) { Row row = data.getRow().get(i - 1); if (range.getFirstRow() <= row.getR() && row.getR() <= range.getLastRow()) { List<Cell> c = row.getC(); for (Cell cell : c) { CellReference cellReference = new CellReference(range.getSheet(), cell.getR()); if (range.getFirstColumn() <= cellReference.getColumn() && cellReference.getColumn() <= range.getLastColumn()) { result.put(cellReference, cell); } } } } return result; }
protected List<Cell> copyCells(BandData band, Range templateRange, List<Row> resultSheetRows, Row firstRow, Worksheet resultSheet) { List<Cell> resultCells = new ArrayList<Cell>(); for (int i = 0; i <= templateRange.getLastRow() - templateRange.getFirstRow(); i++) { Range oneRowRange = new Range(templateRange.getSheet(), templateRange.getFirstColumn(), templateRange.getFirstRow() + i, templateRange.getLastColumn(), templateRange.getFirstRow() + i); Map<CellReference, Cell> cellsForOneRowRange = template.getCellsByRange(oneRowRange); List<Cell> templateCells = new ArrayList<Cell>(cellsForOneRowRange.values()); Row templateRow = !templateCells.isEmpty() ? (Row) templateCells.get(0).getParent() : resultSheet.getSheetData().getRow().get(oneRowRange.getFirstRow() - 1); createFakeTemplateCellsForEmptyOnes(oneRowRange, cellsForOneRowRange, templateCells); Row resultRow = resultSheetRows.get((int) (firstRow.getR() + i - 1)); List<Cell> currentRowResultCells = copyCells(templateRange, band, resultRow, templateCells); resultCells.addAll(currentRowResultCells); copyRowSettings(templateRow, resultRow, getWorksheet(templateRow), getWorksheet(resultRow)); } return resultCells; }
protected Row ensureNecessaryRowsCreated(Range templateRange, Worksheet resultSheet, Row firstRow) { if (firstRow == null) { firstRow = createNewRow(resultSheet); } if (resultSheet.getSheetData().getRow().size() < firstRow.getR() + templateRange.getLastRow() - templateRange.getFirstRow()) { for (int i = 0; i < templateRange.getLastRow() - templateRange.getFirstRow(); i++) { Row row = createNewRow(resultSheet); } } return firstRow; }
protected Row ensureNecessaryRowsCreated(Range templateRange, Worksheet resultSheet, Row firstRow) { if (firstRow == null) { firstRow = createNewRow(resultSheet); } if (resultSheet.getSheetData().getRow().size() < firstRow.getR() + templateRange.getLastRow() - templateRange.getFirstRow()) { for (int i = 0; i < templateRange.getLastRow() - templateRange.getFirstRow(); i++) { Row row = createNewRow(resultSheet); } } return firstRow; }
protected void copyRowSettings(Row templateRow, Row newRow, Worksheet templateWorksheet, Worksheet resultWorksheet) { newRow.setHt(templateRow.getHt()); newRow.setCustomHeight(true); CTPageBreak rowBreaks = templateWorksheet.getRowBreaks(); if (rowBreaks != null && rowBreaks.getBrk() != null) { CTPageBreak resultWorksheetRowBreaks = resultWorksheet.getRowBreaks(); for (CTBreak templateBreak : rowBreaks.getBrk()) { if (templateRow.getR().equals(templateBreak.getId())) { CTBreak newBreak = XmlUtils.deepCopy(templateBreak, Context.jcSML); newBreak.setId(newRow.getR()); resultWorksheetRowBreaks.getBrk().add(newBreak); } } long rowBreaksCount = resultWorksheetRowBreaks.getBrk().size(); resultWorksheetRowBreaks.setCount(rowBreaksCount); resultWorksheetRowBreaks.setManualBreakCount(rowBreaksCount); } newRow.setOutlineLevel(templateRow.getOutlineLevel()); }
protected void copyRowSettings(Row templateRow, Row newRow, Worksheet templateWorksheet, Worksheet resultWorksheet) { newRow.setHt(templateRow.getHt()); newRow.setCustomHeight(true); CTPageBreak rowBreaks = templateWorksheet.getRowBreaks(); if (rowBreaks != null && rowBreaks.getBrk() != null) { CTPageBreak resultWorksheetRowBreaks = resultWorksheet.getRowBreaks(); for (CTBreak templateBreak : rowBreaks.getBrk()) { if (templateRow.getR().equals(templateBreak.getId())) { CTBreak newBreak = XmlUtils.deepCopy(templateBreak, Context.jcSML); newBreak.setId(newRow.getR()); resultWorksheetRowBreaks.getBrk().add(newBreak); } } long rowBreaksCount = resultWorksheetRowBreaks.getBrk().size(); resultWorksheetRowBreaks.setCount(rowBreaksCount); resultWorksheetRowBreaks.setManualBreakCount(rowBreaksCount); } newRow.setOutlineLevel(templateRow.getOutlineLevel()); }
newRef.move(newRow.getR().intValue(), newRef.getColumn());
newRef.move(newRow.getR().intValue(), newRef.getColumn());