Bug 64494: Ensure "applyAlignment" in cell-styles is enabled when necessary

Also check it when fetching currently defined cell-alignment

git-svn-id: https://svn.apache.org/repos/asf/poi/trunk@1885059 13f79535-47bb-0310-9956-ffa450edef68
This commit is contained in:
Dominik Stadler 2021-01-03 12:01:08 +00:00
parent e59e84a213
commit 218354f5b9
2 changed files with 42 additions and 1 deletions

View File

@ -222,6 +222,8 @@ public class XSSFCellStyle implements CellStyle, Duplicatable {
@Override
public HorizontalAlignment getAlignment() {
if(!_cellXf.getApplyAlignment()) return HorizontalAlignment.GENERAL;
CTCellAlignment align = _cellXf.getAlignment();
if(align != null && align.isSetHorizontal()) {
return HorizontalAlignment.forInt(align.getHorizontal().intValue()-1);
@ -629,6 +631,8 @@ public class XSSFCellStyle implements CellStyle, Duplicatable {
@Override
public VerticalAlignment getVerticalAlignment() {
if(!_cellXf.getApplyAlignment()) return VerticalAlignment.BOTTOM;
CTCellAlignment align = _cellXf.getAlignment();
if(align != null && align.isSetVertical()) {
return VerticalAlignment.forInt(align.getVertical().intValue()-1);
@ -654,6 +658,8 @@ public class XSSFCellStyle implements CellStyle, Duplicatable {
*/
@Override
public void setAlignment(HorizontalAlignment align) {
_cellXf.setApplyAlignment(true);
getCellAlignment().setHorizontal(align);
}
@ -1155,6 +1161,8 @@ public class XSSFCellStyle implements CellStyle, Duplicatable {
* @param align - the type of alignment
*/
public void setVerticalAlignment(VerticalAlignment align) {
_cellXf.setApplyAlignment(true);
getCellAlignment().setVertical(align);
}

View File

@ -3630,7 +3630,7 @@ public final class TestXSSFBugs extends BaseTestBugzillaIssues {
}
@Test
public void test64986() throws IOException {
public void test64986() {
XSSFWorkbook w = new XSSFWorkbook();
XSSFSheet s = w.createSheet();
XSSFRow r = s.createRow(0);
@ -3667,4 +3667,37 @@ public final class TestXSSFBugs extends BaseTestBugzillaIssues {
assertNotNull(wb);
}
}
@Test
public void test64494() throws IOException {
try (Workbook wb = new XSSFWorkbook()) {
CellStyle styleRight = wb.createCellStyle();
CellStyle styleLeft = wb.createCellStyle();
styleRight.setAlignment(HorizontalAlignment.RIGHT);
//styleRight.setBorderBottom(BorderStyle.DASH_DOT);
styleLeft.setAlignment(HorizontalAlignment.LEFT);
//styleLeft.setBorderRight(BorderStyle.MEDIUM);
assertEquals(HorizontalAlignment.RIGHT, styleRight.getAlignment());
assertEquals(HorizontalAlignment.LEFT, styleLeft.getAlignment());
Sheet sheet = wb.createSheet("test");
Row row = sheet.createRow(0);
Cell cellRight = row.createCell(0);
cellRight.setCellValue("R");
cellRight.setCellStyle(styleRight);
Cell cellLeft = row.createCell(1);
cellLeft.setCellValue("L");
cellLeft.setCellStyle(styleLeft);
/*try (OutputStream out = new FileOutputStream("/tmp/64494.xlsx")) {
wb.write(out);
}*/
assertEquals(HorizontalAlignment.RIGHT, cellRight.getCellStyle().getAlignment());
assertEquals(HorizontalAlignment.LEFT, cellLeft.getCellStyle().getAlignment());
}
}
}