아파치 포이는 다른 워크북에 한 가지 스타일을 적용합니다.
하나의 셀 스타일을 다른 워크북에 적용하려고 합니다.첫 번째 워크북에 적용할 때는 잘 작동하지만 두 번째와 다음 워크북에 적용할 때는 스타일이 적용되지 않고 다음 예외가 발생합니다.
Exception in thread "Thread-3" java.lang.IllegalArgumentException: This Style does not belong to the supplied Workbook Stlyes Source. Are you trying to assign a style from one workbook to the cell of a differnt workbook?
at org.apache.poi.xssf.usermodel.XSSFCellStyle.verifyBelongsToStylesSource(XSSFCellStyle.java:118)
at org.apache.poi.xssf.usermodel.XSSFCell.setCellStyle(XSSFCell.java:500)
at CoreLayer.ExportManager.ExcelExproter.applyStyle(ExcelExproter.java:224)
at CoreLayer.ExportManager.ExcelExproter.groupSchedule(ExcelExproter.java:47)
at UILayer.ExportDialog$ExportWorker.run(ExportDialog.java:111)
at java.lang.Thread.run(Thread.java:722)
다음 코드가 사용됩니다.
public void professorSchedule(Professor professor) {
Workbook wb = new XSSFWorkbook();
Sheet sheet = wb.createSheet(TextConstants.SCHEDULE);
String safeName = WorkbookUtil.createSafeSheetName(professor.toString() + ".xlsx");
LinkedHashMap<ScheduleSlot, Lesson> professorSchedule = data.getSchedule().getProfessorSchedule(professor);
fillProfessorSchedule(sheet, professorSchedule);
applyStyle(wb, sheet);
try {
FileOutputStream fileOutputStream = new FileOutputStream(settings.getSchedulesPath() + safeName);
wb.write(fileOutputStream);
fileOutputStream.close();
} catch (IOException e) {
e.printStackTrace();
}
}
private void applyStyle(Workbook wb, Sheet sheet) {
CellStyle style = wb.createCellStyle();
style.setWrapText(true);
int columnNumber = 0;
sheet.autoSizeColumn(columnNumber);
for (Row row : rows) {
for (Cell cell : row) {
cell.setCellStyle(style);
sheet.setColumnWidth(columnNumber++, 5000);
}
}
}
여러분들께 미리 감사드립니다!
CellStyle 개체는 하나의 워크북에 한정되므로 이 작업을 수행할 수 없습니다.그것들은 꽤 깊은 물체이고, 스타일의 대부분은 워크북에 보관되어 있기 때문에 그냥 재사용할 수 없습니다.이를 설명하는 유용한 예외도 얻을 수 있습니다!
대신 cloneStyleFrom(CellStyle) 메서드를 사용하여 스타일의 세부 정보를 복사해야 합니다.다음과 같은 것:
Workbook wb = WorkbookFactory.create(new File("existing.xls"));
CellStyle origStyle = wb.getCellStyleAt(1); // Or from a cell
Workbook newWB = new XSSFWorkbook();
Sheet sheet = newWB.createSheet();
Row r1 = sheet.createRow(0);
Cell c1 = r1.createCell(0);
CellStyle newStyle = newWB.createCellStyle();
newStyle.cloneStyleFrom(origStyle);
c1.setCellStyle(newStyle);
newWB.write(new FileOutpuStream("new.xlsx"));
언급URL : https://stackoverflow.com/questions/10773961/apache-poi-apply-one-style-to-different-workbooks
'programing' 카테고리의 다른 글
vue에서 자체 업데이트 정렬을 수행하는 방법 (0) | 2023.06.13 |
---|---|
함수를 변수로 반응에 전달하는 방법TypeScript의 JS 구성 요소 (0) | 2023.06.13 |
Excel VBA - *word*까지 문자열 내용 삭제 (0) | 2023.06.13 |
PIL을 사용하여 이미지를 자르는 방법은 무엇입니까? (0) | 2023.06.13 |
MYSQL / Mariadb 세션 변수에 대한 REVOKE 'SET' 권한 (0) | 2023.06.13 |