/** * Adds a merged region of cells (hence those cells form one) * * @param region (rowfrom/colfrom-rowto/colto) to merge * @return index of this region */ @Override public int addMergedRegion(CellRangeAddress region) { return _sh.addMergedRegion(region); }
/** * Adds a merged region of cells on a sheet. * * @param region to merge * @return index of this region * @throws IllegalArgumentException if region contains fewer than 2 cells * @throws IllegalStateException if region intersects with a multi-cell array formula * @throws IllegalStateException if region intersects with an existing region on this sheet */ @Override public int addMergedRegion(CellRangeAddress region) { return addMergedRegion(region, true); }
/** * Adds a merged region of cells (hence those cells form one). * Skips validation. It is possible to create overlapping merged regions * or create a merged region that intersects a multi-cell array formula * with this formula, which may result in a corrupt workbook. * * To check for merged regions overlapping array formulas or other merged regions * after addMergedRegionUnsafe has been called, call {@link #validateMergedRegions()}, which runs in O(n^2) time. * * @param region to merge * @return index of this region * @throws IllegalArgumentException if region contains fewer than 2 cells */ @Override public int addMergedRegionUnsafe(CellRangeAddress region) { return addMergedRegion(region, false); }
private void writePersonMeetingList(Person person, boolean required) { nextRow(); currentRow.setHeightInPoints(2 * currentSheet.getDefaultRowHeightInPoints()); nextHeaderCell(person.getFullName()); if (required) { nextHeaderCell("Required"); } else { currentSheet.addMergedRegion(new CellRangeAddress(currentRowNumber - 1, currentRowNumber, currentColumnNumber, currentColumnNumber)); nextHeaderCell("Preferred"); } List<Meeting> personMeetingList; if (required) { personMeetingList = solution.getAttendanceList().stream() .filter(attendance -> attendance.getPerson().equals(person) && attendance instanceof RequiredAttendance) .map(Attendance::getMeeting) .collect(toList()); } else { personMeetingList = solution.getAttendanceList().stream() .filter(attendance -> attendance.getPerson().equals(person) && attendance instanceof PreferredAttendance) .map(Attendance::getMeeting) .collect(toList()); } List<MeetingAssignment> personMeetingAssignmentList = solution.getMeetingAssignmentList().stream() .filter(meetingAssignment -> personMeetingList.contains(meetingAssignment.getMeeting())) .collect(toList()); writeMeetingAssignmentList(personMeetingAssignmentList); }
private void writeTimeslotDaysHeaders() { LocalDate previousTimeslotDay = null; int mergeStart = -1; for (Timeslot timeslot : solution.getTimeslotList()) { LocalDate timeslotDay = timeslot.getDate(); if (timeslotDay.equals(previousTimeslotDay)) { nextHeaderCell(""); } else { if (previousTimeslotDay != null) { currentSheet.addMergedRegion(new CellRangeAddress(currentRowNumber, currentRowNumber, mergeStart, currentColumnNumber)); } nextHeaderCell(DAY_FORMATTER.format(timeslotDay)); previousTimeslotDay = timeslotDay; mergeStart = currentColumnNumber; } } if (previousTimeslotDay != null) { currentSheet.addMergedRegion(new CellRangeAddress(currentRowNumber, currentRowNumber, mergeStart, currentColumnNumber)); } }
} else { if (mergingPreviousMeetingList && mergeStart < currentColumnNumber) { currentSheet.addMergedRegion(new CellRangeAddress(currentRowNumber, currentRowNumber, mergeStart, currentColumnNumber)); currentSheet.addMergedRegion(new CellRangeAddress(currentRowNumber, currentRowNumber, mergeStart, currentColumnNumber));
private void writeRoomTalks(List<Timeslot> dayTimeslotList, Room room, List<Talk> roomTalkList) { Timeslot mergePreviousTimeslot = null; int mergeStart = -1; for (Timeslot timeslot : dayTimeslotList) { List<Talk> talkList = roomTalkList.stream() .filter(talk -> talk.getTimeslot() == timeslot).collect(toList()); if (talkList.isEmpty() && mergePreviousTimeslot != null && timeslot.getStartDateTime().compareTo(mergePreviousTimeslot.getEndDateTime()) < 0) { nextCellVertically(); } else { if (mergePreviousTimeslot != null && mergeStart < currentRowNumber) { currentSheet.addMergedRegion(new CellRangeAddress(mergeStart, currentRowNumber, currentColumnNumber, currentColumnNumber)); } boolean unavailable = room.getUnavailableTimeslotSet().contains(timeslot) || Collections.disjoint(room.getTalkTypeSet(), timeslot.getTalkTypeSet()); nextTalkListCell(unavailable, talkList, talk -> StringUtils.abbreviate(talk.getTitle(), 50) + "\n" + StringUtils.abbreviate(talk.getSpeakerList().stream().map(Speaker::getName).collect(joining(", ")), 30), true); mergePreviousTimeslot = talkList.isEmpty() ? null : timeslot; mergeStart = currentRowNumber; } } if (mergePreviousTimeslot != null && mergeStart < currentRowNumber) { currentSheet.addMergedRegion(new CellRangeAddress(mergeStart, currentRowNumber, currentColumnNumber, currentColumnNumber)); } }
} else { if (mergingPreviousTimeGrain && mergeStart < currentRowNumber) { currentSheet.addMergedRegion(new CellRangeAddress(mergeStart, currentRowNumber, currentColumnNumber, currentColumnNumber)); currentSheet.addMergedRegion(new CellRangeAddress(mergeStart, currentRowNumber, currentColumnNumber, currentColumnNumber));
private void writeTimeGrainsHoursVertically(int minimumInterval) { int mergeStart = -1; for (TimeGrain timeGrain : solution.getTimeGrainList()) { if (timeGrain.getGrainIndex() % (Math.ceil(minimumInterval * 1.0 / TimeGrain.GRAIN_LENGTH_IN_MINUTES)) == 0) { if (mergeStart > 0) { currentSheet.addMergedRegion(new CellRangeAddress(mergeStart, currentRowNumber, 0, 0)); } nextRow(); nextCell().setCellValue(timeGrain.getDateTimeString()); mergeStart = currentRowNumber; } else { nextRow(); } } if (mergeStart < currentRowNumber) { currentSheet.addMergedRegion(new CellRangeAddress(mergeStart, currentRowNumber, 0, 0)); } }
private void writeTimeGrainDaysHeaders() { Day previousTimeGrainDay = null; int mergeStart = -1; for (TimeGrain timeGrain : solution.getTimeGrainList()) { Day timeGrainDay = timeGrain.getDay(); if (timeGrainDay.equals(previousTimeGrainDay)) { nextHeaderCell(""); } else { if (previousTimeGrainDay != null) { currentSheet.addMergedRegion(new CellRangeAddress(currentRowNumber, currentRowNumber, mergeStart, currentColumnNumber)); } nextHeaderCell(DAY_FORMATTER.format( LocalDate.ofYearDay(Year.now().getValue(), timeGrainDay.getDayOfYear()))); previousTimeGrainDay = timeGrainDay; mergeStart = currentColumnNumber; } } if (previousTimeGrainDay != null) { currentSheet.addMergedRegion(new CellRangeAddress(currentRowNumber, currentRowNumber, mergeStart, currentColumnNumber)); } }
nextRow(); nextHeaderCell("Driving time in seconds. Delete this sheet to generate it from air distances."); currentSheet.addMergedRegion(new CellRangeAddress(currentRowNumber, currentRowNumber, currentColumnNumber, currentColumnNumber + 10)); Map<Pair<Double, Double>, List<RockLocation>> latLongToLocationMap = Stream.concat(
} else { if (mergePreviousTimeslot != null && mergeStart < currentColumnNumber) { currentSheet.addMergedRegion(new CellRangeAddress(currentRowNumber, currentRowNumber, mergeStart, currentColumnNumber)); currentSheet.addMergedRegion(new CellRangeAddress(currentRowNumber, currentRowNumber, mergeStart, currentColumnNumber));
for (LocalDate date = firstDate; date.compareTo(lastDate) <= 0; date = date.plusDays(1)) { nextHeaderCell(DAY_FORMATTER.format(date)); currentSheet.addMergedRegion(new CellRangeAddress(currentRowNumber, currentRowNumber, currentColumnNumber, currentColumnNumber + (maximumHour - minimumHour))); currentColumnNumber += (maximumHour - minimumHour); .max(Comparator.naturalOrder()).get(); int stretch = maxArrivalHour - departureHour; currentSheet.addMergedRegion(new CellRangeAddress(currentRowNumber, currentRowNumber, currentColumnNumber, currentColumnNumber + stretch)); currentColumnNumber += stretch;
} else { if (mergePreviousTimeslot != null && mergeStart < currentColumnNumber) { currentSheet.addMergedRegion(new CellRangeAddress(currentRowNumber, currentRowNumber, mergeStart, currentColumnNumber)); currentSheet.addMergedRegion(new CellRangeAddress(currentRowNumber, currentRowNumber, mergeStart, currentColumnNumber));
destRegion.setFirstRow(destRegion.getFirstRow() + shift); destRegion.setLastRow(destRegion.getLastRow() + shift); addMergedRegion(destRegion);
private void writeTaxiTimeMaps() { nextSheet("Taxi time", 1, 1, false); nextRow(); nextHeaderCell("Driving time in minutes by taxi between two nearby airports to allow employees to start from a different airport."); currentSheet.addMergedRegion(new CellRangeAddress(currentRowNumber, currentRowNumber, currentColumnNumber, currentColumnNumber + 20)); List<Airport> airportList = solution.getAirportList(); nextRow(); nextHeaderCell("Airport code"); for (Airport airport : airportList) { nextHeaderCell(airport.getCode()); } for (Airport a : airportList) { nextRow(); nextHeaderCell(a.getCode()); for (Airport b : airportList) { Long taxiTime = a.getTaxiTimeInMinutesTo(b); if (taxiTime == null) { nextCell(); } else { nextCell().setCellValue(taxiTime); } } } autoSizeColumnsWithHeader(); }
destRegion.setFirstRow(destRowNum); destRegion.setLastRow(destRowNum); getSheet().addMergedRegion(destRegion);
nextHeaderCell(""); nextHeaderCell("Availability"); currentSheet.addMergedRegion(new CellRangeAddress(currentRowNumber, currentRowNumber, currentColumnNumber, currentColumnNumber + (int) ChronoUnit.DAYS.between(startDate, endDate) - 1)); nextRow(); startNextMonthDate = endDate; currentSheet.addMergedRegion(new CellRangeAddress(currentRowNumber, currentRowNumber, currentColumnNumber, currentColumnNumber + (int) ChronoUnit.DAYS.between(date, startNextMonthDate) - 1)); } else {
/** * Adds a merged region of cells (hence those cells form one) * * @param region (rowfrom/colfrom-rowto/colto) to merge * @return index of this region */ public int addMergedRegion(CellRangeAddress region) { return _sh.addMergedRegion(region); }
@Override public void generateTitleCellSuper(@Nonnull OutputTableContext ctx, @Nonnull Column column, int colSpan, boolean columnWithSeparator) { if (column.getTitle() != null) { XSSFCell cell = incrementColumnAndCreateNewCell(); cell.setCellValue(column.getSuperTitle()); if (colSpan > 1) { int spanOffset = colSpan - 1; viewOutputExcel.getOutput().addMergedRegion(new CellRangeAddress(rowIndex, rowIndex, columnIndex, columnIndex += spanOffset)); } } }