Bug 58084: Fix cloning Cell Styles with Borders
git-svn-id: https://svn.apache.org/repos/asf/poi/trunk@1717973 13f79535-47bb-0310-9956-ffa450edef68
This commit is contained in:
parent
387fb86d68
commit
96cb8c18fe
@ -164,6 +164,12 @@ public class XSSFCellStyle implements CellStyle {
|
|||||||
);
|
);
|
||||||
addFill(fill);
|
addFill(fill);
|
||||||
|
|
||||||
|
// bug 58084: set borders correctly
|
||||||
|
CTBorder border = CTBorder.Factory.parse(
|
||||||
|
src.getCTBorder().toString(), DEFAULT_XML_OPTIONS
|
||||||
|
);
|
||||||
|
addBorder(border);
|
||||||
|
|
||||||
// Swap it over
|
// Swap it over
|
||||||
_stylesSource.replaceCellXfAt(_cellXfId, _cellXf);
|
_stylesSource.replaceCellXfAt(_cellXfId, _cellXf);
|
||||||
} catch(XmlException e) {
|
} catch(XmlException e) {
|
||||||
@ -203,6 +209,13 @@ public class XSSFCellStyle implements CellStyle {
|
|||||||
_cellXf.setFillId(idx);
|
_cellXf.setFillId(idx);
|
||||||
_cellXf.setApplyFill(true);
|
_cellXf.setApplyFill(true);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private void addBorder(CTBorder border) {
|
||||||
|
int idx = _stylesSource.putBorder(new XSSFCellBorder(border, _theme));
|
||||||
|
|
||||||
|
_cellXf.setBorderId(idx);
|
||||||
|
_cellXf.setApplyBorder(true);
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Get the type of horizontal alignment for the cell
|
* Get the type of horizontal alignment for the cell
|
||||||
|
@ -1017,4 +1017,48 @@ public class TestXSSFCellStyle {
|
|||||||
|
|
||||||
wb.close();
|
wb.close();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static void copyStyles(Workbook reference, Workbook target) {
|
||||||
|
final short numberOfStyles = reference.getNumCellStyles();
|
||||||
|
for (short i = 0; i < numberOfStyles; i++) {
|
||||||
|
final CellStyle referenceStyle = reference.getCellStyleAt(i);
|
||||||
|
if (i == 0) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
final CellStyle targetStyle = target.createCellStyle();
|
||||||
|
targetStyle.cloneStyleFrom(referenceStyle);
|
||||||
|
}
|
||||||
|
/*System.out.println("Reference : "+reference.getNumCellStyles());
|
||||||
|
System.out.println("Target : "+target.getNumCellStyles());*/
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void test58084() throws IOException {
|
||||||
|
Workbook reference = XSSFTestDataSamples.openSampleWorkbook("template.xlsx");
|
||||||
|
Workbook target = new XSSFWorkbook();
|
||||||
|
copyStyles(reference, target);
|
||||||
|
|
||||||
|
assertEquals(reference.getNumCellStyles(), target.getNumCellStyles());
|
||||||
|
final Sheet sheet = target.createSheet();
|
||||||
|
final Row row = sheet.createRow(0);
|
||||||
|
int col = 0;
|
||||||
|
for (short i = 1; i < target.getNumCellStyles(); i++) {
|
||||||
|
final Cell cell = row.createCell(col++);
|
||||||
|
cell.setCellValue("Coucou"+i);
|
||||||
|
cell.setCellStyle(target.getCellStyleAt(i));
|
||||||
|
}
|
||||||
|
/*OutputStream out = new FileOutputStream("C:\\temp\\58084.xlsx");
|
||||||
|
target.write(out);
|
||||||
|
out.close();*/
|
||||||
|
|
||||||
|
Workbook copy = XSSFTestDataSamples.writeOutAndReadBack(target);
|
||||||
|
|
||||||
|
// previously this failed because the border-element was not copied over
|
||||||
|
copy.getCellStyleAt((short)1).getBorderBottom();
|
||||||
|
|
||||||
|
copy.close();
|
||||||
|
|
||||||
|
target.close();
|
||||||
|
reference.close();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user