apache poi appliquer un style à des classeurs différents
J'essaye d'appliquer un style de cellule à defferent woekbooks. Il fonctionne bien, quand je l'applique au premier classeur, mais quand je suis en train de le faire avec la deuxième et la prochaine classeurs - aucun style n'est appliqué et l'exception suivante est levée.
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)
Le code suivant est utilisé:
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);
}
}
}
Merci à tous d'avance!
OriginalL'auteur mr.nothing | 2012-05-27
Vous devez vous connecter pour publier un commentaire.
Vous ne pouvez pas le faire, CellStyle objets sont spécifiques à un classeur. Ils sont assez profondes des objets, et le style est tenue dans le classeur, vous ne pouvez pas ré-utiliser. Vous obtenez même une utile exception qui explique cette!
Ce que vous devez faire est d'utiliser le cloneStyleFrom(CellStyle) méthode, pour copier les détails de ce style. Quelque chose comme:
Vous devez vous assurer que vous utilisez uniquement un style avec le classeur que vous avez créé. Vous pouvez créer des styles une fois par classeur (piste!), ou de créer/charger pour un classeur et le clone plus tard
OriginalL'auteur Gagravarr